2009-11-24 29 views
0

有誰知道基於JTable的Swing組件或代碼示例可以保存到文件?即:提供一個菜單項或按鈕,當點擊時提示用戶輸入文件位置並將表格的內容保存到文件(CSV,XLS,TXT或其他)。JTable,可以保存到文件

簡單的部分是遍歷行並保存到文件。但是,在表格本身上也需要有一個UI組件,允許用戶啓動保存。

+0

凡在桌子上你會看到這個按鈕?可以將按鈕放在表格單元格中,但我認爲在這種特殊情況下這是沒有意義的。爲什麼按鈕不能位於JTable的上方,下方或旁邊?另外,如果您將TableModel的內容保存爲文件,您是否也需要加載內容? – rob 2009-11-24 22:48:21

回答

5

寫你自己的。你所要做的就是使用table.getModel()。getValueAt(...)方法並遍歷行和列,然後將數據寫入文件。

+0

剛剛更新了問題,提及在表格本身上還需要有一個UI組件,以允許用戶啓動保存。 – tukushan 2009-11-24 21:32:01

+2

但這只是一個按鈕,標記爲「保存」,後面的一個動作稱爲保存方法。 – 2009-11-24 21:32:53

0

我不知道任何滿足這種確切需求的類似於JTable的Swing組件。

但是,您希望在哪裏放置按鈕?在我看來,通過將JTable添加到JScrollPane並將「保存」按鈕放在JScrollPane上或將JScrollPane添加到JPanel並將「保存」按鈕放在JPanel上,您會更好。我沒有看到JTable本身有一個按鈕背後的邏輯。

如果你想要一個菜單​​項,你可能想要創建菜單欄並將JTable添加到任何容納菜單欄的容器中。在桌子上還沒有添加按鈕,請注意,但它在視覺上是相同的。

1

我已經實現了這個使用以下方法:

  • 創建Action實現:DelimitedExportAction。我通常會將此操作添加到JToolBar,JMenuBarJPopupMenu
  • 公開方法void registerTable(JTable tbl)。在內部,此方法將FocusListener添加到JTable。當給定JTable獲得焦點時,設置tableToExport實例變量並啓用該操作。
  • 當調用actionPerformed(ActionEvent)方法時,調用導出邏輯,如果tableToExport != null
  • 而不是遍歷TableModel我建議遍歷JTable,併爲每一行調用getValueAt(int, int)底層TableModel上,記住要在視圖和模型行/列索引之間的轉換。這對於最終用戶來說更直觀,因爲這意味着在導出期間應用於JTable的任何排序和過濾都會被保留。 (在我的實現中,我實際上爲用戶提供了導出所有數據或可見數據的選項。)
  • 定義DelimitedExportFormatter,其作用是將由getValueAt(int, int)返回的每個對象轉換爲String。與爲JTable提供渲染器時類似,此類應允許您爲給定的Class或特定列提供格式,其中列特定格式優先。應用於所有其他值的默認格式應爲:value == null ? "" : value.toString()
  • 我允許在不同的模式來進行配置的操作(這也支配着行動的圖標):
    • 導出到文件:啓動一個文件選擇對話框,允許用戶指定保存目的地。
    • 導出到Excel:將導出的數據保存爲臨時文件並在Excel中打開它。
    • 可配置導出:啓動一個對話框,用戶可以指定:行分隔符,字段分隔符,要導出的列,要導出的行(全部,可見,選定),保存目標(Excel /文件)。

恐怕我不能提供的代碼,因爲它是專有的,但希望這將讓你在正確的軌道上。祝你好運!

相關問題