【发布时间】:2018-12-13 15:17:12
【问题描述】:
我对 Java 编程有点陌生。
我在同时制作 GUI 和图形时遇到了困难。
例如,如果我想在JFrame 上显示一个JButton 和一个球,那么代码对我不起作用。
这是我使用的代码:
package paint;
import javax.swing.*;
import java.awt.*;
public class PAINT extends JFrame{
private Image dbImage;
private Graphics dbg;
JButton b;
public PAINT(){ //Class constructor for the JFrame
super("THE TITLE");
setSize(500,500);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
b = new JButton("Enter");
add(b);
}
public void paint(Graphics g){ //Double Buffering
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g){
g.setColor(Color.BLACK);
g.fillOval(300, 300, 40,40); //To paint the ball
repaint();
}
public static void main(String[] args) {
new PAINT();
}
}
使用此代码,只显示一个没有按钮的大球。
【问题讨论】:
-
好的,这里有一些危险信号。首先,JFrames 已经是双缓冲的,所以您正在做的工作已经在您的
paint中完成。这是第二个危险信号:永远不要覆盖paint方法。只覆盖paintComponent。然后,如果您没有填充全屏空间(因为您目前没有),请始终在覆盖的paintComponent中调用super.paintComponent(g),以避免发生错误的重绘。最后(更多代码风格,而不是危险信号):将@Override添加到您的覆盖方法中,以明确它是一个覆盖方法(并避免错误的签名)