我正在为 Java GUI 苦苦挣扎 - 感谢您提前提供的任何帮助!我有一个 JFrame,其中有几个组件:触发 Action 监听器的 button (Jbutton),comp 这是我试图替换 JScrollPane的组件strong> 里面有一个组件(什么类型的组件并不重要,可以是文本字段、表格或任何东西)。
我想触发一个 Action - 删除组件,将新组件放在与删除组件相同的位置并重新绘制窗口(我用它来显示不同类型的文本字段和 JTables)。这是我的:
JScrollPane sp = new JScrollPane(comp);
this.add(sp, BorderLayout.CENTER);
//this works so far - first time I display this is ok!
private void replace() {
comp = new Component(...); //name and type of the components is not important
sp = new JSCrollPane(comp);
this.remove(sp); //remove old component
add(sp, BorderLayout.CENTER);
repaint();
revalidate();
}
为什么函数不能代替工作?它什么都不做(它改变了组件的逻辑,所以如果我访问 comp 的内容,它会被刷新,但它仍然显示旧的)。
我写的有点象征性,因为我的代码很长...感谢您的帮助! 编辑:在我的代码中忘记了一行..
最佳答案
您没有必要像以前那样尝试删除滚动 Pane 。
要更改滚动 Pane 显示的组件,只需进行以下调用:
sp.setViewportView(new Component(...));
调用之后,旧组件将从 View 中移除并由新组件替换。
所以你的代码应该看起来像这样:
JScrollPane sp = new JScrollPane(comp);
this.add(sp, BorderLayout.CENTER);
private void replace() {
comp = new Component(...); //name and type of the components is not important
sp.setViewportView(comp);
}
关于Java - 替换 JFrame 中的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661266/