【发布时间】:2011-08-31 18:47:02
【问题描述】:
我正在创建一个小程序,它由一个扩展 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);行,菜单栏继续工作。
【问题讨论】:
-
“菜单栏停止工作”是什么意思?你还能点击一些项目吗?可能是子菜单在您新添加的文本字段后面呈现...
-
您不应在
paintComponent()中添加和删除文本字段。paintComponent仅用于绘制组件! -
@Jeroen 您仍然可以打开菜单,但不显示子菜单。仔细观察后,我注意到只有在打开菜单时才会出现的一条小蓝线,所以我猜它们确实被渲染在其他东西后面。但是文本字段不妨碍菜单。这是一张图片:link
标签: java components add japplet