table.getSelectedRow()默认返回0,而不是-1
问题描述:
所以我一直试图在执行动作之前检查是否选择了一行。当你实现table.getSelectedRow()时,如果没有选择行,它应该返回-1。但默认返回0 下面是一个小图形用户界面来证明这个问题。它运行良好table.getSelectedRow()默认返回0,而不是-1
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
哦当然是。非常感谢 –