Java - 替换 JFrame 中的组件

标签 java swing

我正在为 Java GUI 苦苦挣扎 - 感谢您提前提供的任何帮助!我有一个 JFrame,其中有几个组件:触发 Action 监听器的 button (Jbutton)comp 这是我试图替换 JScrollPane 里面有一个组件(什么类型的组件并不重要,可以是文本字段、表格或任何东西)。

我想触发一个 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/

相关文章:

java - 在 Spring Boot 命令行中传递多个参数

java - 通过代码从 GUIbuilder 访问静态表单

java - Java中是否有常用的有理数库?

java - KML 在未挤压时出现线性环的高度问题

java - Arraylist<Hashmap> Intent 上的空对象引用

java - 使用 Class<?> 变量创建通用对象

java 。将图像图标从 jpanel 1 上的 JLabel 拖放到 panel 2 上的 JLabel。添加计数器功能

java - 如何以给定的 X 和 Y 坐标绘制一个圆作为圆的中间点?

java - JTable 不会监听 Doubleclicks

Java Swing 重新打包组件