JTable getSelectedRow 不返回选定的行索引 [英] JTable getSelectedRow does not return the selected row index

查看:35
本文介绍了JTable getSelectedRow 不返回选定的行索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I try to get data in the row that is selected but getSelectedRow() doesn't work. Actually, I used that method in the other class, but it works in there. When I try to print the row index; the prompt shows -1; as not selected.

我尝试了互联网上的大多数解决方案,但他们没有解决我的解决方案.

I tried most of solutions that are on the internet but they didn't solve my solutions.

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
" +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
" +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 变量现在不与您放置在表单中的表格链接.我认为这是造成您问题的原因.

You add jTable1 to the JScrollPane at first and only then you create jTable1. It's incorrect way. jTable1 variable doen't linked now with table you place at the form. I think it's cause of your problem.

在添加到 JScrollPane 之前移动 jTable1 的创建.

Move creation of the jTable1 before adding in into 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);
...

这篇关于JTable getSelectedRow 不返回选定的行索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆