table.getSelectedRow()默认为0而不是-1



因此,我一直在尝试在执行操作之前检查一行。实现table.getSelectedRow((时,如果未选择行,则应返回-1。但是我的默认为0以下是一个小的GUI,只是为了证明这个问题。它运行良好

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
public class tester extends JFrame implements ActionListener{
private JTable table;
private int row;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                tester window = new tester();
                window.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
/**
 * Create the application.
 */
public tester() {
    initialize();
}
/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    setSize(600,400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().setLayout(null);

    // **SETTING OUT MY TABLE OF USERS**
    String[] columns1 = new String[] {
            "ID", "Name"
    };
    Object [][] data = {
            {"S145","PAPA"},
            {"S134","JAKE"},
            {"S324","MATTHEW"},
    };

    DefaultTableModel tm = new DefaultTableModel(data, columns1);
    table = new JTable(tm);
    table.setBorder(new EmptyBorder(0, 0, 0, 0));
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setBounds(0, 11, 574, 217);
    getContentPane().add(scrollPane);
    table.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent me) {
            row = table.getSelectedRow();
            System.out.println("User row is: "+row);

        }
    });
    System.out.println("User row is: "+row);
}
@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
}

}

不,它不是(返回0(

之间...

private int row;

和此处(内部initialize,而不是您的MouseListener(...

System.out.println("User row is: "+row);

您永远不会更改row值,因此它仍然携带其默认值,即0

如果将代码更改为更类似...

的东西
private void initialize() {
    //...
    table.addMouseListener(new MouseAdapter() {
        //...
    });
    row = table.getSelectedRow();
    System.out.println("User row is: " + row);
}

然后它将打印-1

最新更新