簡體   English   中英

如何使用2種不同的類別繪畫

[英]How do you paint using 2 different classes

(該程序並不會最終做任何我只是用來學習/實驗的事情)

當我運行代碼時,我希望一個類繪制一個黑色的圓圈,而另一個類繪制一個與其相交的藍色圓圈。 但是,當添加Class2實例時,我現在擁有它的方式會覆蓋Frame中的Class1。

我可以看到發生了什么問題,但不確定如何解決。

是否有可能做到這一點,或者您應該在同一個paint()下做所有事情?

public class Practice{
    public static GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    public static final int dWidth = gd.getDisplayMode().getWidth();
    public static final int dHeight = gd.getDisplayMode().getHeight();  

   public static void main(String[] args){
       heyo();
       }

   public static void heyo(){
       JFrame window = new JFrame();
       Class1 obj1 = new Class1();
       Class2 obj2 = new Class2();

        window.setSize(dWidth, dHeight);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setResizable(false);
        window.add(obj1);
        window.add(obj2);

        window.setVisible(true);
       }

}

public class Class1 extends JComponent{

    public void paint(Graphics b){
        Graphics2D brush = (Graphics2D)b;
        brush.setColor(Color.black);

        brush.drawOval(100, 100, 50, 50);

    }

}

public class Class2 extends JComponent{

    public void paint(Graphics c){
        Graphics2D brush = (Graphics2D)c;
        brush.setColor(Color.blue);

        brush.drawOval(200, 200, 50, 50);

    }

}
  • 默認情況下, JFrame使用BorderLayout並且在中心添加了兩個組件。

  • 使用JPanel並在添加組件JPanel第一則最后加入JPanelJFrame

  • 不要重寫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);
        }
    });
}

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM