有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

获取JAVA中DefaultTableModel中字段的值

用户已选择了一行中某个字段的值,如何获取所选行中id字段的值? 例如,用户选择第2行中name字段的值,我想了解第2行中id字段的值。应该如何在TableModelListener中编写

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

共 (2) 个答案

  1. # 1 楼答案

    当id列索引为0时:系统。出来println(model.getValueAt(e.getFirstRow(),0))

  2. # 2 楼答案

    使用ListSelectionListener而不是TableModelListener:

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