Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用两个不同的类进行绘制_Java_Jframe_Jpanel_Paint_Jcomponent - Fatal编程技术网

Java 如何使用两个不同的类进行绘制

Java 如何使用两个不同的类进行绘制,java,jframe,jpanel,paint,jcomponent,Java,Jframe,Jpanel,Paint,Jcomponent,(这个程序实际上不会做任何事情,我只是用它来学习/实验) 当我运行代码时,我希望一个类绘制一个黑色圆圈,另一个类绘制一个与之相交的蓝色圆圈。但是我现在的方式是,当添加Class2的实例时,它会覆盖框架中的Class1 我知道出了什么问题,只是不知道怎么解决 有可能做到这一点吗?还是你应该在同一个油漆下做所有事情() JFrame默认情况下使用BorderLayout,您在中间添加了两个组件 使用JPanel并首先在JPanel中添加组件,然后最后在JFrame中添加JPanel 不要重写pai

(这个程序实际上不会做任何事情,我只是用它来学习/实验)

当我运行代码时,我希望一个类绘制一个黑色圆圈,另一个类绘制一个与之相交的蓝色圆圈。但是我现在的方式是,当添加Class2的实例时,它会覆盖框架中的Class1

我知道出了什么问题,只是不知道怎么解决

有可能做到这一点吗?还是你应该在同一个油漆下做所有事情()

  • JFrame
    默认情况下使用
    BorderLayout
    ,您在中间添加了两个组件

  • 使用
    JPanel
    并首先在
    JPanel
    中添加组件,然后最后在
    JFrame中添加
    JPanel

  • 不要重写
    paint()
    方法,而是使用
    paintComponent()

以下是示例代码:

class Class1 extends JComponent {

    @Override
    public void paintComponent(Graphics b) {
        super.paintComponent(b);
        ...    
    }

}

class Class2 extends JComponent {

    @Override
    public void paintComponent(Graphics c) {
        super.paintComponent(c);
        ...    
    }

}


public static void heyo() {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            JFrame window = new JFrame();

            JPanel panel = new JPanel(new GridLayout(1, 2));
            Class1 obj1 = new Class1();
            Class2 obj2 = new Class2();
            panel.add(obj1);
            panel.add(obj2);
            ...

            window.getContentPane().add(panel);
            window.setVisible(true);
        }
    });
}

不要重写
paint()
方法。使用
paintComponent()
不要忘记调用
super.paintComponent()内部重写
paintComponent()
method这帮了大忙。非常感谢
class Class1 extends JComponent {

    @Override
    public void paintComponent(Graphics b) {
        super.paintComponent(b);
        ...    
    }

}

class Class2 extends JComponent {

    @Override
    public void paintComponent(Graphics c) {
        super.paintComponent(c);
        ...    
    }

}


public static void heyo() {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            JFrame window = new JFrame();

            JPanel panel = new JPanel(new GridLayout(1, 2));
            Class1 obj1 = new Class1();
            Class2 obj2 = new Class2();
            panel.add(obj1);
            panel.add(obj2);
            ...

            window.getContentPane().add(panel);
            window.setVisible(true);
        }
    });
}