table.getSelectedRow() 默认返回 0 而不是 -1
table.getSelectedRow() is returning 0 by default instead of -1
所以我一直在尝试在执行操作之前检查是否选择了一行。当您实施 table.getSelectedRow() 时,如果没有选择任何行,它应该 return -1。但是我的默认是 returning 0
下面是一个小图形用户界面,只是为了演示这个问题。运行良好
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
所以我一直在尝试在执行操作之前检查是否选择了一行。当您实施 table.getSelectedRow() 时,如果没有选择任何行,它应该 return -1。但是我的默认是 returning 0 下面是一个小图形用户界面,只是为了演示这个问题。运行良好
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