开发人员您好,我在 jframe 中使用两个按钮和一个表格当我单击按钮时,应生成具有不同行数的新表,并且在单击表的行时,它应显示行数和列数再次,当我单击另一个按钮时,它应该创建具有新行数的新表再次单击它时,它应该显示行号和列号
我正在使用以下代码。第一次创建表时,它会生成正确的结果,但是当再次创建表时,单击任何行时,它会给出行号和列号 -1 。和数组索引越界异常我的代码中有什么问题请帮助
JTable table;
JScrollPane jsp;
Button b1 = new JButton("1");
Button b2 = new JButton("2");
add(b1);
add(b2);
b1.addActionListener (this);
b1.addActionListener (this);
public void actionPerformed(ActionEvent ae) {
int i = 0;
if (ae.getActionCommand().equals("1")) {
i = 1;
}
if (ae.getActionCommand().equals("2")) {
i = 2;
}
String title[] = {""};
Object obj[][] = new Object[i][1];
table = new JTable(obj, title);
jsp = new JScrollPane(table);
add(jsp);
table.addMouseMotionListener(this);
}
public void mouseClicked(MouseEvent me) {
// first time it returns the true result but on new table creation
//i and j are returned -1 .
int i = table.getSelectedRow();
int j = table.getSelectedColumn();
System.out.println("i is" + i);
System.out.println("j is" + j);
}
此示例还有一些其他问题,但为了解决您眼前的问题,您需要获取 MouseEvent
的源并对其进行操作:
public void mouseClicked(MouseEvent me) {
// first time it returns the true result but on new table creation
//i and j are returned -1 .
JTable table = (JTable)me.getSource();
int i = table.getSelectedRow();
int j = table.getSelectedColumn();
System.out.println("i is" + i);
System.out.println("j is" + j);
}
问题出在您的 ActionListener
中,您将 table
重新分配给一个新表(该表没有选择任何行)。因此,如果您单击第一个表,它仍然会对第二个表(未选择任何行)执行操作。
我是一名优秀的程序员,十分优秀!