2011-11-29 101 views
-3

您知道在iTunes中雙擊某首歌曲時,如何播放MP3文件。使Java JTable行打開文本文件

對於我的用戶界面使用JTable,如何將行連接到應用程序文件系統中的文本文件,以便當我雙擊一行時,與該行關聯的txt文件打開?

+1

沒有downvote。你有沒有嘗試過什麼..? – Mudassir

+2

你有什麼問題?你知道如何使用MouseListener進行雙擊嗎?你知道如何獲得在表格中雙擊的單元格,以便可以打開文件名稱嗎?你知道如何閱讀文件嗎?你知道如何將文本文件加載到JTextArea中嗎? – camickr

回答

7

點擊任何一行,你需要有你的文件名以便打開它,在下面的代碼中,我已經將文件名存儲在最後一列中。我用鼠標點擊打開記事本中的文件。

代碼段:

import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.io.IOException; 
import java.awt.Desktop; 
import javax.swing.JFrame; 
import javax.swing.JTable; 
import javax.swing.ListSelectionModel; 
import javax.swing.table.AbstractTableModel; 
import javax.swing.table.TableModel; 

public class JTableTest { 
JTable myTable; 

public JTableTest() { 
    JFrame frame = new JFrame("Double Click on Table Test"); 
    final String[] columnNames = {"S.No. ", "File Name", "File Path", ""}; 
    final Object[][] tableData = {{"1", "test1.txt", "C://test1.txt", "C:/Test/test1.txt"}, 
      {"2", "test2.txt", "C://test2.txt", "C:/Test/test2.txt"}, {"3", "test2.txt", "C://test3.txt", "C:/Test/test3.txt"},}; 

    TableModel dataModel = new AbstractTableModel() { 
     public int getColumnCount() { 
      return columnNames.length; 
     } 

     public int getRowCount() { 
      return tableData.length; 
     } 

     public Object getValueAt(int row, int col) { 
      return tableData[row][col]; 
     } 

     public String getColumnName(int column) { 
      return columnNames[column]; 
     } 

     public Class getColumnClass(int col) { 
      return getValueAt(0, col).getClass(); 
     } 

     public void setValueAt(Object aValue, int row, int column) { 
      tableData[row][column] = aValue; 
     } 
    }; 

    myTable = new JTable(dataModel); 
    myTable.getColumnModel().getColumn(3).setMaxWidth(0); 
    myTable.getColumnModel().getColumn(3).setMinWidth(0); 
    myTable.getColumnModel().getColumn(3).setPreferredWidth(0); 
    myTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    frame.getContentPane().add(myTable); 
    frame.pack(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 

    myTable.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      if (e.getClickCount() == 2) { 
       int selectedRow = myTable.getSelectedRow(); 
       try { 
        Desktop.getDesktop().open(new File((String) myTable.getValueAt(selectedRow, 3))); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
        } 
       } 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     new JTableTest(); 
    } 
} 

希望這可以讓你去。

+0

完成,感謝您的建議,對我來說很好的學習。 – mprabhat

+0

+1加入寬限期。 – trashgod

+0

偉大的編輯。 +1 .. –