我正在创建一个applet,它包含一个扩展JApplet的类,一个菜单栏和一个扩展JPanel的类。(因此applet中显示了一个菜单栏和一个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);线路,菜单栏继续工作。
答案 0 :(得分:0)
我相信你遇到了线程问题。在绘制期间添加和删除JComponents 可能会弄乱EDT(首先调用paint方法)。
答案 1 :(得分:0)
我曾经遇到过与其他组件背后绘制的弹出式菜单类似的问题。
尝试在特定子菜单上调用静态JPopupMenu.setDefaultLightWeightPopupEnabled(false);
或setLightWeightPopupEnabled
。这将使(所有)弹出菜单(即子菜单)成为具有本地对等体的重量级组件。