我正在努力使用java GUI - 感谢提前的任何帮助!我有一个JFrame,其中我有几个组件:按钮(Jbutton)触发动作监听器,comp是一个组件我试图用它中的组件替换JScrollPane(它无关紧要什么类型的组件,可能是文本字段,桌子或任何东西).
我想触发一个动作 - 删除组件,将新组件放在与删除组件相同的位置并重新绘制窗口(我使用它来显示不同类型的文本字段和JTable).这就是我所拥有的:
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();
}
Run Code Online (Sandbox Code Playgroud)
为什么没有功能取代工作?它没有做任何事情(它改变逻辑中的组件,所以如果我访问comp的内容,它会刷新但它仍然显示旧的).
我写它有点象征意义,因为我的代码很长...感谢您的帮助!编辑:在我的代码中忘了一行..
您没有必要像以前那样尝试删除滚动窗格.
要更改滚动窗格显示的组件,只需进行以下调用:
sp.setViewportView(new Component(...));
Run Code Online (Sandbox Code Playgroud)
在该调用之后,旧组件将从视图中删除并替换为新组件.
所以你的代码应该看起来像这样:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3856 次 |
| 最近记录: |