如何使GUI和图形同时出现?

时间:2018-07-05 08:06:57

标签: java swing jframe

我是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();
}
}

使用此代码,仅显示没有按钮的大球。

1 个答案:

答案 0 :(得分:0)

首先,请阅读Performing Custom PaintingPainting in AWT and Swing,以更好地了解Swing中绘画的工作方式。

接下来,避免覆盖paint之类的顶级容器,这些容器是复杂的复合组件,并且由于绘画的工作方式,往往会导致更多问题,而后又无法解决。

正确完成后,绘画是一系列链接的方法调用,使您可以更好地自定义过程。通常建议,最好的起点是JFrame。由于绘画过程的性质,除非您完全知道它在做什么并且准备好承担它的责任,否则您还应该调用方法paintComponent的实现。

Swing组件本身在默认情况下是双缓冲的,这是另一个使用super中的paint的原因

解决方案可能类似于...

And now it works

JFrame