Java - 在单个gui中显示静态fileChooser面板和动态复选框面板

时间:2012-03-13 21:53:04

标签: java swing user-interface dynamic event-dispatch-thread

我正在开展一个大学项目,允许用户通过GUI中的文件选择器选择一个csv文件,然后显示该文件每列的复选框。

我编写后端代码来处理任意数量的列,但我遇到的问题是显示复选框。我接近这个的方法是将文件选择器放在一个面板中,然后在一秒钟内选中复选框,以便在读取文件后从actionListener方法添加第二个面板,将其设置为可见。

但是,在首次设置GUI时未填充复选框名称数组,我无法显示复选框。

我已经尝试过使用选项卡式布局tabbed layoutcard layout并阅读向导布局,但从我们看到的情况来看,这些都是他们的组件已经初始化,而动作听众只是简单地设置它们可见/不可见?

在这个阶段我开始怀疑是否有可能在单个gui中执行此操作或者如何使用两个GUI来解决问题。

我只使用java 3个月,任何正确方向的指针都会有很大的帮助, 谢谢!

1 个答案:

答案 0 :(得分:2)

考虑

  • 在SwingWorker的doInBackground方法中读取CSV文件,以免冻结事件线程
  • 通过向SwingWorker添加PropertyChangeListener并检查PropertyChangeEvent的propertyName是否为“state”且其newValue是否为SwingWorker.StateValue.DONE,可以在完成SwingWorker时通知GUI。
  • 获得列名后,您可以动态创建JCheckBox并将其添加到使用GridLayout的JPanel中。在Swing中动态创建组件没有任何限制。
  • 然后通过CardLayout在GUI中显示JPanel,或者将其添加到显示的容器中,或者通过在对话窗口(如JDialog或JOptionPane)中显示它。同样,在Swing中没有任何限制。
  • 请确保revalidate()repaint()任何更改过的容器,或者如果需要调整大小,请在JFrame上调用pack()(如果可能的话,不建议使用)。