Java swing - 重绘在重新调整大小时复制组件(JButtons 和 JLabels)

标签 java swing resize duplicates jbutton

我遇到了这个奇怪的问题。我的教授似乎无法复制它,他提供的帮助充其量也很少。所以说到点子上。此代码在面板上生成 JButton 并添加到 JFrame 的内容 Pane 中:

public myPanel extends JPanel {
    static final long serialVersionUID = 1;
    public myPanel() {
        this.setPreferredSize(new Dimension(600, 40));
    }
    public void paintComponent(Graphics graphicsDrawer) {
        super.paintComponent(graphicsDrawer);
        this.add(new JButton("A Button"));
    }
}

这是界面代码

public class myGUI {
    public myGUI() {
    }
    public void showGUI() {
        JFrame frame = new JFrame("Issues!!!");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new myPanel());
        frame.pack();
        frame.setVisible(true);
    }
}

GUI 然后由这个类运行

// It is unnecessary to show here but I made a class that
// implements runnable that creates a myGUI object and calls
// showGUI
public static void main(String[] args) {
    RunnableGUI runGUI = new RunnableGUI();
    javax.swing.SwingUtilities.invokeLater(runGUI);
}

这是我的基本 代码。然而,我已经隔离了这一点,即使有了最基本的要素,问题仍然存在。下面是我遇到问题的照片。

Initial Frame w/ 1 button

Vertical Re-size creates extra buttons

我已经尝试了所有我能找到和想到的东西。

我认为框架每次重新调整大小时都会重新绘制按钮。但是,由于分配要求,框架必须能够调整大小。

运行带有 JRE 7、8 的 Windows 8(我将下载 6,但我认为这不会有帮助)

最佳答案

永远不要这样做:

public void paintComponent(Graphics graphicsDrawer) {
    super.paintComponent(graphicsDrawer);
    this.add(new JButton("A Button"));  // ***** yikes! ****
}

paintComponent 方法用于绘制。您不能完全控制它是否会被调用,甚至它是否会被调用,它可以被调用多次 次,这意味着要添加很多按钮。此外,您希望避免组件创建代码或任何在绘画方法中减慢程序流程的代码,因为这些方法部分决定了 GUI 的感知响应能力,因此您需要绘画方法 (paintpaintComponent)精简、平均和快速

在构造函数或初始化方法中添加按钮,以便控制调用该代码的频率。

关于Java swing - 重绘在重新调整大小时复制组件(JButtons 和 JLabels),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29723866/

相关文章:

java - 为什么我的 getIndex 方法不起作用?

java - 将 XMI 文件导入 XML 项目错误 : Invalid byte 1 of 1-byte utf-8 sequence

Java 1.8.121 不适用于 linux - NoClassDefFoundError

Java BoxLayout 问题

java - 我想读取HDFS上的文件

java - 检查Jlabel是否有Icon

java - 使用字符串数组将文件名分配给 ImageIcons (Java)

css - 在 IE 上调整窗口大小时自动换行不起作用

iOS:如何防止调整大小后的 View 自行重置?

c# - 复选框文本 l 不适合其文本