使用Java将组件添加到面板

时间:2011-05-24 09:15:21

标签: java components add japplet

我正在创建一个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);线路,菜单栏继续工作。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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