Java - 替换JFrame中的组件

Sma*_*ajl 4 java swing

我正在努力使用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的内容,它会刷新但它仍然显示旧的).

我写它有点象征意义,因为我的代码很长...感谢您的帮助!编辑:在我的代码中忘了一行..

Igw*_*alu 6

您没有必要像以前那样尝试删除滚动窗格.

要更改滚动窗格显示的组件,只需进行以下调用:

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)