Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
464 views
in Technique[技术] by (71.8m points)

swing - Make a Java JTable row open a text file

You know how when you double click on a song in iTunes, a MP3 file plays.

Using a JTable for my user interface, how do I link a row to a text file in the application file system so that when I double click on a row, a txt file associated with that row opens?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

On click on any row you need to have the file name with you in order to open it, in the below code I have stored the file name in the last column. And I am using the same on mouse click to open the file in notepad.

Code Snippet:

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();
    }
}

Hope this gets you going.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...