(这个程序真的不会做任何我只是用它来学习/实验)
当我运行我的代码时,我希望一个类绘制一个黑色圆圈,另一个类绘制一个与其相交的蓝色圆圈。但是当我添加Class2的实例时,我现在拥有它的方式会覆盖Frame中的Class1。
我可以看到出了什么问题我还不确定如何修复它。
是否可以这样做,或者你是否应该在同一个油漆()下做所有事情?
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);
}
}
答案 0 :(得分:0)
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);
}
});
}