2012-10-10 67 views
1

你好開發人員我使用jframe中的兩個按鈕和一個表 當我點擊一個按鈕時應該生成不同行數的新表,並且在點擊表的行時應該再次顯示沒有行和列 ,當我在另一個按鈕,它應該創建行 的新不新表點擊,而它再次單擊它應該不顯示的行和列沒有表生成運行時和jtable的鼠標點擊事件

我使用下面的代碼爲它。第一次創建表時,它會生成正確的結果,但是當再次創建表時,然後單擊任何行時,它會給出行號和列號-1。和數組索引越界異常的什麼是錯在我的代碼plz幫助

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); 
} 
+1

發生異常的地方在哪一行?用代碼中的註釋表示這一點。另外,考慮在你的問題中添加一些標點符號,段落等。目前,它很難閱讀和理解。 –

+0

1)你將兩個ActionListener添加到b1按鈕2)你正在添加一個MouseMotionListener到你的表中,但只有一個mouseClicked方法3)你每次點擊一個按鈕時都會向容器添加新表而不重新驗證4 )你的代碼甚至工作? – Rempelos

+0

這只是你的代碼的一部分,你應該發佈更多 – Rempelos

回答

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到一個新的表(任意行選擇沒有)。所以如果你點擊第一個表格,它仍然會在第二個表格上執行操作(它沒有選擇任何行)。