java - PaintComponent 没有删除 JPanel

标签 java swing jpanel jbutton paintcomponent

该程序将在JPanel 上显示3 个按钮。程序编译成功。 GUI 窗口随后出现并且是空的。当我最小化窗口然后再次最大化它时,按钮就会出现。再次执行此操作时,会出现另一组按钮。当窗口刷新并且旧数据保持不变时,该按钮继续出现。

JPanel 类

class MyJPanel extends JPanel {
JButton jb1, jb2, jb3;

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    jb1 = new JButton();
    jb2 = new JButton("Green");
    jb3 = new JButton("Blue");
    //g.drawString("Welcome!", 100, 100);
    ImageIcon img = new ImageIcon("next.png");
    jb1.setIcon(img);
    jb1.setToolTipText("Button 1");
    this.add(jb1);
    this.add(jb2);
    this.add(jb3);
}
}

JFrame 类

class MyJFrame extends JFrame {
MyJPanel mjp;

public MyJFrame(String title) {
    super(title);

    mjp = new MyJPanel();

    Container ct = getContentPane();
    ct.add(mjp);

    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

驱动程序类别

class Gui5JButton {
public static void main(String[] args) {
    MyJFrame mjf = new MyJFrame("Prakhar");
    mjf.repaint();
}
}

最佳答案

每次您的面板需要重绘时,都会调用

paintComponent ,因此每次您最小化窗口时,它都会再次放置该按钮。如果我理解您想要正确执行的操作,则需要删除覆盖并输入以下代码:

jb1 = new JButton();
jb2 = new JButton("Green");
jb3 = new JButton("Blue");
//g.drawString("Welcome!", 100, 100);
ImageIcon img = new ImageIcon("next.png");
jb1.setIcon(img);
jb1.setToolTipText("Button 1");
this.add(jb1);
this.add(jb2);
this.add(jb3);

在 MyJPanel 类的构造函数中。

关于java - PaintComponent 没有删除 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39897425/

相关文章:

java - 如何通过聊天应用程序的套接字将字符串安全地编码为字节

java - SWING - 同一个 JPanel 中的不同颜色

java - JFrame 内的绝对定位图形 JPanel 被空白部分阻塞

java - 检测 jpanel 焦点的变化

java - 忽略 Apache Olingo 中的字段

java - Tomcat 禁用序列化比较

java - 在 .form 项目中使用 .java 类中的方法

java - 使用 javapanel 的元素

java - 从数据库获取数据时出现 NullPointerException,使用注解在 Struts 2 中调用 Action

java - 如何保存函数内部所做的数组更改?