我是Java编程的新手。
在同时创建GUI和图形时,我面临着困难。
例如,如果我想在JButton
上显示JFrame
和球,则该代码对我不起作用。
这是我使用的代码:
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();
}
}
使用此代码,仅显示没有按钮的大球。
答案 0 :(得分:0)
首先,请阅读Performing Custom Painting和Painting in AWT and Swing,以更好地了解Swing中绘画的工作方式。
接下来,避免覆盖paint
之类的顶级容器,这些容器是复杂的复合组件,并且由于绘画的工作方式,往往会导致更多问题,而后又无法解决。
正确完成后,绘画是一系列链接的方法调用,使您可以更好地自定义过程。通常建议,最好的起点是JFrame
。由于绘画过程的性质,除非您完全知道它在做什么并且准备好承担它的责任,否则您还应该调用方法paintComponent
的实现。
Swing组件本身在默认情况下是双缓冲的,这是另一个使用super
中的paint
的原因
解决方案可能类似于...
JFrame