我尝试在选定的行中获取数据,但getSelectedRow()不起作用。实际上,我在另一个类中使用了该方法,但是它在那里工作。当我尝试打印行索引时;提示显示-1;如未选择。

我尝试了大多数Internet上的解决方案,但它们没有解决我的解决方案。

public Canteen() {
    try {
        jbInit();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private void jbInit() throws Exception {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.getContentPane().setLayout( null );
    this.setSize( new Dimension(400, 300) );
    this.setTitle( "CANTEEN" );
    jScrollPane1.setBounds(new Rectangle(0, 0, 230, 235));
    jButton1.setText("REFRESH");
    jButton1.setBounds(new Rectangle(0, 235, 100, 20));
    jButton1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jButton1_actionPerformed(e);
            }
        });
    jButton2.setText("CLOSE");
    jButton2.setBounds(new Rectangle(120, 235, 110, 20));
    jButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                jButton2_actionPerformed(e);
            }
        });
    jScrollPane1.getViewport().add(jTable1, null);
    this.getContentPane().add(jButton2, null);
    this.getContentPane().add(jButton1, null);
    this.getContentPane().add(jScrollPane1, null);
    jTable1 = new JTable (model);

    String header [] = {"CUSTOMER", "PRODUCT", "QUANTITY","ORDER NO"};
    for (int i = 0; i < 4; i++){
        model.addColumn(header[i]);
        }

    //refresh every 1 minute
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask(){
        public void run(){
            model.setRowCount(0);
            try {
                Class.forName(driverName);
                conn = DriverManager.getConnection(url,username, password);
                statement = conn.createStatement();
                ResultSet rs = statement.executeQuery("SELECT USER_NAME, QUANTITY, PRD_NAME, ORDER_NUMBER FROM ORDERS ORDER BY ORDER_NUMBER DESC");
                int count = rs.getRow();
                String user [] = new String [count];
                int i = 0;
                while (rs.next()){
                    String name = rs.getString(1);
                    String prdName = rs.getString(3);
                    int number = rs.getInt(2);
                    int orderNumber = rs.getInt(4);
                    model.insertRow(i,new Object []{name,prdName,number, orderNumber});
                    }
                conn.close();
                }
                    catch (ClassNotFoundException s) {
                            System.out.println("Couldn't find the database driver");
                            System.out.println(s);

                        }
                        catch (SQLException s) {
                            System.out.println("Couldn't connect to the database\n" +s);
                        }

       }
    },0, 60000);
    }

private void jButton1_actionPerformed(ActionEvent e) {
    //set from row 0 for refresh
    model.setRowCount(0);

    try {
        Class.forName(driverName);
        conn = DriverManager.getConnection(url,username, password);
        statement = conn.createStatement();
        ResultSet rs = statement.executeQuery("SELECT USER_NAME, QUANTITY, PRD_NAME FROM ORDERS ORDER BY ORDER_NUMBER DESC");
        int count = rs.getRow();
        String user [] = new String [count];
        int i = 0;
        while (rs.next()){
            String name = rs.getString(1);
            String prdName = rs.getString(3);
            int number = rs.getInt(2);
            model.insertRow(i,new Object []{name,prdName,number});
            }
        conn.close();
        }
    catch (ClassNotFoundException s) {
            System.out.println("Couldn't find the database driver");
            System.out.println(s);

        }
        catch (SQLException s) {
            System.out.println("Couldn't connect to the database\n" +s);
        }

}

private void jButton2_actionPerformed(ActionEvent e) {
    System.out.println(jTable1.getSelectedRow());
        }
}

最佳答案

查看您的代码

private void jbInit() throws Exception {
    ...
    jScrollPane1.getViewport().add(jTable1, null);
    this.getContentPane().add(jButton2, null);
    this.getContentPane().add(jButton1, null);
    this.getContentPane().add(jScrollPane1, null);
    jTable1 = new JTable (model);
    ...


首先将jTable1添加到JScrollPane,然后才创建jTable1。这是不正确的方式。 jTable1变量现在不与您在表单上放置的表链接。我认为这是您遇到问题的原因。

在添加到jTable1之前,先移动JScrollPane的创建。

...
jTable1 = new JTable (model);
jScrollPane1.getViewport().add(jTable1, null);
this.getContentPane().add(jButton2, null);
this.getContentPane().add(jButton1, null);
this.getContentPane().add(jScrollPane1, null);
...

09-28 04:10