0

我正在创建一个小程序,它由一个扩展 JApplet 的类、一个菜单栏和一个扩展 JPanel 的类组成。(所以小程序中显示了一个菜单栏和一个 JPanel)。

在这个类中,我向 JPanel 添加和删除一些文本字段。这一切都很好。这就是它变得棘手的地方:它只在第一次工作。当我向 JPanel 添加一些新的文本字段时,它们被添加并在 JPanel 中可见,但 JFrame 中的菜单栏停止工作。

由于代码过于广泛,我将只发布其中的一部分。

这是我将 JPanel 添加到 JApplet 的代码:

public class Simulator extends JApplet implements ItemListener, ActionListener {
    Container pane = getContentPane();
    canvas = new DrawCanvas();
    pane.add(canvas, BorderLayout.LINE_END);
}

这是JPanel的代码:

class DrawCanvas extends JPanel {
    public void paintComponent(Graphics g) {
        if(textfield != null)
            remove(textfield);
        textfield = new JTextField();
        this.add(textfield);
    }
}

这第一次有效(没有删除任何内容),但第二次菜单栏停止工作。当我省略 this.add(textfield); 行,菜单栏继续工作。

4

2 回答 2

0

我相信您遇到了线程问题。在绘制期间添加和删除 JComponents可能会弄乱 EDT(它首先调用绘制方法)。

于 2011-05-24T09:34:21.133 回答
0

我曾经在其他组件后面绘制弹出菜单时遇到过类似的问题。尝试调用 staticJPopupMenu.setDefaultLightWeightPopupEnabled(false);setLightWeightPopupEnabled在您的特定子菜单上。这将使(所有)弹出菜单(即子菜单)成为具有本地对等点的重量级组件。

于 2011-05-24T09:50:57.287 回答