为什么我不能在java中的Frame上画任何东西?

2024-03-06

编码就在这里。 我无法在框架内创建任何矩形或圆形。 该项目的目标是创建转换 celcius 2 华氏度和华氏度 2 摄氏度。

所以我想要的是,请教我如何在框架旁边绘制矩形或椭圆形。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class C2F  extends JComponent{

private double input1, output1;
private double input2, output2;
JPanel center = new JPanel();
JPanel top = new JPanel();
JPanel east = new JPanel();
JPanel south = new JPanel();
//for giving input & output

C2F(){

JFrame frame = new JFrame();
frame.setTitle("C2F");
frame.setSize(700,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());

frame.getContentPane().add(top,BorderLayout.NORTH);
frame.getContentPane().add(center,BorderLayout.CENTER);
frame.getContentPane().add(south,BorderLayout.SOUTH);
frame.getContentPane().add(east,BorderLayout.EAST);
frame.setVisible(true);
CC2F();

}

public void CC2F(){
//making frame

//give specific location
JLabel L1 = new JLabel("Please input Celcius or Fahrenheit to Convert");
top.add(L1);

JLabel l1 = new JLabel("Cel -> Fah");
south.add(l1);

JTextField T1 = new JTextField(12);
south.add(T1);

JButton B1 = new JButton("Convert");
south.add(B1);

JLabel l2 = new JLabel("Fah -> Cel");
south.add(l2);

JTextField T2 = new JTextField(12);
south.add(T2);

JButton B2 = new JButton("Convert");
south.add(B2);
//to create buttons and labels to give an answer
B1.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){

    input1 = Double.parseDouble(T1.getText());
    output1 = input1 *(9/5) + 32;
    T2.setText(""+output1);
    repaint();
}
});

B2.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){

input2 = Double.parseDouble(T2.getText());
output2 = (input2 - 32)/9*5;
T1.setText(""+output2);
}
});
//making events

//placing the buttons and labels
output1 = 0;
output2 = 0;
//initialize the value

}
public void paintComponent(Graphics g) {
//error spots. it compiles well. But this is not what I want. 
 super.paintComponent(g);   
Graphics2D gg = (Graphics2D) g;

gg.setColor(Color.BLACK);
gg.drawOval(350, 500,12,12);

gg.setColor(Color.RED);
gg.fillRect(350, 500, 10,(int) output1);
gg.fillOval(350, 500, 10, 10);

gg.setColor(Color.RED);
gg.fillRect(350, 500, 10,(int) output2);
gg.fillOval(350, 500, 10, 10);

//to draw stuffs
}

public static void main(String[] args)
{//to run the program
 new C2F();
 }
 }

  1. 你从来没有真正添加C2F任何能够绘制它的东西,因此你的paint方法永远不会被调用。
  2. 你应该覆盖paintComponent代替paint,因为您已经破坏了组件的油漆链,这可能会导致无穷无尽的问题,带来美妙而有趣的油漆故障。公约还建议您致电super.paintComponent(当覆盖paintComponent)以及在进行任何定制绘画之前

See 在 AWT 和 Swing 中绘画 http://www.oracle.com/technetwork/java/painting-140037.html and 进行定制绘画 http://docs.oracle.com/javase/tutorial/uiswing/painting/更多细节

作为一般建议,我不鼓励您在另一个组件的构造函数中创建框架,这将使该组件几乎再次无法使用(例如,如果您想在另一个容器上重复使用它)

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class C2F extends JComponent {

    public C2F() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                TestPane center = new TestPane();
                JPanel top = new JPanel();
                JPanel east = new JPanel();
                JPanel south = new JPanel();
                //give specific location
                JLabel L1 = new JLabel("Please input Celcius or Fahrenheit to Convert");
                top.add(L1);

                JLabel l1 = new JLabel("Cel -> Fah");
                south.add(l1);

                JTextField T1 = new JTextField(12);
                south.add(T1);

                JButton B1 = new JButton("Convert");
                south.add(B1);

                JLabel l2 = new JLabel("Fah -> Cel");
                south.add(l2);

                JTextField T2 = new JTextField(12);
                south.add(T2);

                JButton B2 = new JButton("Convert");
                south.add(B2);
                //to create buttons and labels to give an answer
                B1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {

                        double input1 = Double.parseDouble(T1.getText());
                        double output1 = input1 * (9 / 5) + 32;
                        T2.setText("" + output1);
                        center.setOutput1(output1);
                    }
                });

                B2.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {

                        double input2 = Double.parseDouble(T2.getText());
                        double output2 = (input2 - 32) / 9 * 5;
                        T1.setText("" + output2);
                        center.setOutput2(output2);
                    }
                });
                //making events
                frame.getContentPane().add(top, BorderLayout.NORTH);
                frame.getContentPane().add(center, BorderLayout.CENTER);
                frame.getContentPane().add(south, BorderLayout.SOUTH);
                frame.getContentPane().add(east, BorderLayout.EAST);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private double output1, output2;

        public TestPane() {
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 600);
        }

        public void setOutput1(double output1) {
            this.output1 = output1;
            repaint();
        }

        public void setOutput2(double output2) {
            this.output2 = output2;
            repaint();
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;

            g2d.setColor(Color.BLACK);
            g2d.drawOval(350, 500, 12, 12);

            g2d.setColor(Color.RED);
            g2d.fillRect(350, 0, 10, (int) output1);
            g2d.fillOval(350, 0, 10, 10);

            g2d.setColor(Color.BLUE);
            g2d.fillRect(350, 0, 10, (int) output2);
            g2d.fillOval(350, 0, 10, 10);
            g2d.dispose();
        }

    }

    public static void main(String[] args) {//to run the program
        new C2F();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能在java中的Frame上画任何东西? 的相关文章

随机推荐

  • 如何反转 WPF Storyboard 动画?

    我在 Expression Blend 4 中的图像上创建了 WPF Storyboard 动画 悬停时 图像逐渐模糊 当鼠标离开图像时 有什么方法可以撤消或反转故事板吗 我可以让它触发 Storyboard Remove 但这实际上不会向
  • laravel livewire,如何通过单击将id或数据传递给另一个组件

    我有两个组件 帖子 和 帖子 帖子 显示帖子 通过单击图像我想在另一个组件中显示单击帖子的数据 下面发布类和组件 组件视图 div class post foreach posts as post div h1 post gt name h
  • 如何在定义之间添加空行?

    我成功地将我的代码设置为 clang format 格式 就像 iIwant 一样 然而 有一点让我很困扰 我想要在结构 类 函数的定义之间以及函数的声明之间有一个空行 目前 在格式化时 clang format 会删除空行 从而使所有内容
  • Android:有没有办法禁用通知捆绑?

    我有一个应用程序 用户可以在其中收到有关他们需要做的事情的多个通知 用户可以选择使其中一些通知持久化 我通过调用NotificationCompat Builder setOngoing 来实现 至少在我的 Android 版本 Nouga
  • SQL 2016 - 将 XML 转换为 Json

    我正在尝试使用 SQL2016 中的 FOR JSON PATH 将 XML 列转换为 Json 但遇到一些问题 给定以下 XML 请注意 某些 Product 元素可能包含 Product 列表
  • 如何为 Objective-C 协议提供默认实现?

    我想指定一个具有可选例程的 Objective C 协议 当例程不是由符合协议的类实现时 我想在其位置使用默认实现 协议本身是否有一个地方可以定义这个默认实现 如果不是 那么减少到处复制和粘贴此默认实现的最佳实践是什么 Objective
  • Chrome 中的 Fetch API 内存泄漏

    当以最简单的方式使用 fetch API 时 Chrome 无法正确进行垃圾收集 难道我做错了什么 for i 0 i lt 100 i fetch https upload wikimedia org wikipedia commons
  • 有没有办法使用java在Linux机器上获取用户的UID?

    有没有办法使用java在Linux机器上获取用户的UID 我知道System getProperty user name 方法 但它返回用户名 我正在寻找 UID 你可以执行id命令并读取结果 例如 id u jigar output 10
  • 如何在Qt6中的QML中使用QVideoSink

    我创建了自己的视频接收器 继承自QVideoSink在 Qt 6 中 我想在 QML 端显示该接收器的内容 我该怎么做 VideoOutputQML 类型有videoSink属性 但它是只读的 VideoOutput 和 QVideoWid
  • 使用最新的 Xcode 在 iOS 3.1.3 中进行测试

    如何使用最新的 Xcode 版本在 iOS 3 1 3 中测试应用程序 可以在模拟器中执行此操作吗 如果没有 是否可以将设备降级到 iOS 3 1 3 是的 您可以降级设备 它没有得到官方支持 但我已经在两台 3G 上完成了它 并在 3 1
  • 将字符串添加到 ImageView 对象 Android

    我需要将一个字符串附加到 ImageView 对象中 以便我可以执行类似的操作imgView1 getString 它会返回它 我知道有getTags and setTags但根据我的理解 它只使用整数 谢谢 只需补充 dharms 答案
  • 没有使用 Spring Security 进行身份验证和授权

    我的项目要求我使用 Spring Security 进行 CSRF 和 XSS 保护 但不使用它进行身份验证和授权 我已将 SS 配置到我的应用程序中 但每次访问页面时 它都会自动将我重定向到其登录页面 我如何禁用此功能 我的Securit
  • 指定 cartopy 中的纬度/经度标签位置(删除某些边)

    Cartopy 0 18 0 中为任何地图投影添加纬度 经度标签的新功能非常出色 这是这个包的一个很好的补充 对于某些地图 特别是在极地地区 纬度 经度标签可能非常拥挤 这是一个例子 from matplotlib import pyplo
  • 扩展网址如何工作

    我知道这些类型的 URL 如何加载页面 基于它们的 GET 参数 在后端大致是这样的 但这些类型的 URL 是如何工作的呢 我的意思是 数据是如何动态加载的 www dummysite com parm subpage1 xyz www d
  • 处理连续的 JSON 流

    现已不复存在 页面http stream twitter com 1 statuses sample json http stream twitter com 1 statuses sample json用于返回连续且无限的 JSON 数据
  • 第一次执行代码时颜色不正确

    我有一段代码可以在一页上绘制多个堆叠条形图 我指定了一个调色板 以便每个数据组都与每个图表中的相同颜色相关联 我发现第一个图表中的颜色不正确 但在所有后续图表中都是正确的 如果我在同一个 R 会话中重新运行代码 所有图表都具有正确的颜色 但
  • 如何在 Mac 上设置 2.7 的 python 路径?

    我知道 这个问题已经被问过很多次了 也被回答过很多次了 但是 我仍然无法摆脱这个 我在我的 mac 上发现了以下信息 cd Library Frameworks Python framework Versions Current gt 2
  • 如何管理pouchdb和couchdb同步?

    存储多个用户数据的最佳方法是每个用户每个数据库 我正在使用同样的方法 我在服务器上有 couchdb 在移动应用程序上有 pouchdb 我通过在 pouchdb 和 couchdb 中为用户创建单独的数据库来维护每个用户数据 这意味着我在
  • 将 ssh 密钥与 scp 和 ssh 结合使用

    我正在尝试使用 scp 将一些文件复制到目标系统 然后登录到系统并安装这些文件 我在这里使用 scp 和 ssh 命令以及 ssh 密钥进行无密码身份验证 ssh 密钥是在源系统上创建的 如下所示 这是创建 ssh 密钥的正确且安全的方法吗
  • 为什么我不能在java中的Frame上画任何东西?

    编码就在这里 我无法在框架内创建任何矩形或圆形 该项目的目标是创建转换 celcius 2 华氏度和华氏度 2 摄氏度 所以我想要的是 请教我如何在框架旁边绘制矩形或椭圆形 import java awt BorderLayout impo