1

你好开发人员我在 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);
}
4

1 回答 1

1

此示例还有一些其他问题,但要解决您的直接问题,您需要获取源代码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给一个新表(没有选择任何行)。因此,如果您单击第一个表,它仍然会在第二个表(没有选择任何行)上执行它的操作。

于 2012-10-10T13:59:47.823 回答