0

ユーザーが行のフィールドの値を選択しました。選択した行の id フィールドの値を取得するにはどうすればよいですか? 例えば、ユーザーが2行目のnameフィールドの値を選択し、2行目のidフィールドの値を知りたい。

public class Main {
    public static DefaultTableModel model;

    public static void main(String[] args) throws Exception {
        model = new DefaultTableModel();
        JFrame frame = new JFrame("Creating a Scrollable JTable!");
        JPanel panel = new JPanel();
        model.addColumn("id");
        model.addColumn("name");
        model.addColumn("family");
        Class.forName("oracle.jdbc.driver.OracleDriver");
        java.sql.Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "SYSTEM", "1234");
        PreparedStatement st = con.prepareStatement("select * from person");
        ResultSet r = st.executeQuery();
        while (r.next()) {
            model.addRow(new Object[]{r.getString("id"), r.getString("name"), r.getString("family")});
        }
        st.close();
        con.close();
        model.addTableModelListener(new TableModelListener() {
            public void tableChanged(TableModelEvent e) {
                System.out.println(model.getValueAt(e.getFirstRow(), e.getColumn()));
            }
        });
        JTable table = new JTable(model);
        frame.add(panel);
        panel.add(table);
        frame.setVisible(true);
    }
}
4

2 に答える 2

2

TableModelListener ではなく ListSelectionListener を使用します。

    table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
        public void valueChanged(ListSelectionEvent e) {
            if (e.getValueIsAdjusting()) return;
            int selectedRow = table.convertRowIndexToModel(table.getSelectedRow());
            int selectedColumn = table.convertColumnIndexToModel(0);

            String selectedId = (String)model.getValueAt(selectedRow, selectedColumn);
            System.out.println(selectedId);
        }
    });
于 2012-07-28T12:08:56.660 に答える
1

id 列のインデックスが 0 の場合: System.out.println(model.getValueAt(e.getFirstRow(),0))

于 2012-07-28T12:07:06.700 に答える