2012-03-13 17 views
0

我正在開展一個大學項目,以允許用戶通過GUI中的文件選擇器選擇一個csv文件,然後顯示每個列的複選框的文件。Java - 在單個GUI中顯示靜態文件選擇器面板和動態複選框面板

我有後端代碼編寫來處理任何數量的列,但我遇到的問題是顯示覆選框。我接觸到的方式是將文件選擇器放在一個面板中,複選框放在第二個面板中,以便在讀取文件後添加第二個面板,將其設置爲可見,從actionListener方法中進行設置。

但是,如果在首次設置GUI時沒有填充複選框名稱數組,我無法顯示覆選框。

因爲我已經使用這兩種選項卡式佈局tabbed layoutcard layout和嚮導佈局讀了嘗試,但是從我看過,這些人人都有自己的組件initalised和動作監聽器簡單地將它們設置顯示/隱藏?

在這個階段,我開始懷疑是否有可能在單個GUI中做到這一點,或者我怎麼能用兩個GUI來解決這個問題。

我一直只使用java 3個月,任何指針在正確的方向將是一個巨大的幫助, 謝謝!

回答

2

考慮

  • 在讀一的SwingWorker的doInBackground方法CSV文件,以免凍結事件線程
  • 您可以通過添加一個PropertyChangeListener的SwingWorker的GUI得到通知時的SwingWorker完成,並檢查PropertyChangeEvent的propertyName是否爲「state」,其newValue是否爲SwingWorker.StateValue.DONE。
  • 一旦獲得了列名,就可以動態創建JCheckBox並將它們添加到使用GridLayout的JPanel中。在Swing中動態創建組件沒有任何限制。
  • 然後通過CardLayout或者將其添加到顯示的容器中,或者通過在對話窗口(如JDialog或JOptionPane)中顯示該JPanel。同樣,在Swing中這樣做沒有限制。
  • 請務必revalidate()repaint()更改任何容器,或者在JFrame上調用pack()(如果需要調整它的大小)(如果可能,不建議)。
+0

我覺得這聽起來像我需要什麼,我只有在用戶通過fileChooser選擇文件後才能讀取文件,那麼我會從fileChooser上的actionListener調用doInBackground方法?編輯 - 這是我已經構建的第一個GUI,並未全部在「主」線程中運行 – rafferb 2012-03-13 23:09:23

+0

@rafferb:您想了解如何使用SwingWorkers(請查看[Swing中的併發](http:// docs .oracle.com/JavaSE的/教程/ uiswing /併發/ index.html中))。你永遠不會調用'doInBackground()'方法。你可以調用它的execute()方法,類似於你幾乎從不調用Thread或Runnable的run()方法,而是調用Thread的start()方法。 – 2012-03-13 23:51:07

+0

謝謝你,希望我會得到它與那個排序! – rafferb 2012-03-14 00:08:34

2
I'm working on a college project to allow a user select a csv file via a 
file chooser in a GUI and then display a checkbox for each column of the file. 

I have the back end code written to handle any number of columns but the 
problem I'm having is displaying the checkboxes. 

cvs file代表表結構,使用JTable而不是放置噸JComponents到GUI困擾,在JTable代表JCheckBox只有Boolean

+0

@rafferb:這個建議比我的好多了。 1 + – 2012-03-13 22:18:46

+0

謝謝,也許我錯了,但表似乎顯示的文件中的數據?我使用複選框的原因是程序的其餘部分會在每個選定列的單獨gui中輸出一個圖形,並且這些列可以包含數百個行值! – rafferb 2012-03-13 22:46:06

相關問題