[英]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
第一則最后加入JPanel
中JFrame
不要重寫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.