我正嘗試使用默認組件對可編輯的JTable
執行撤消(和重做)功能。 JTable
有一個額外的類來指定其名稱爲SpecifiedJTable
的屬性。JTable將不會偵聽Doubleclicks
爲此,我想抓住單元格被雙擊的時刻(即選擇/標記要編輯單元的時刻),以便將單元格中的信息及其座標推送到堆棧上。
這應該通過MouseListener
...至少這是我的想法。 我試圖
class JTableSpecified extends JTable {
private static final long serialVersionUID = 1L;
private int c; // the currently selected column
private int r; // the currently selected row
public JTableSpecified(String[][] obj, String[] columnNames) {
super(obj, columnNames); // constructs the real table
// makes that you can only select one row at a time
this.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
// makes that columns are not squeezed
this.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// forbids to rearrange the columns
getTableHeader().setReorderingAllowed(false);
// adds action listener
this.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
r = getSelectedRow();
c = getSelectedColumn();
// get the String at row r and column c
String s = (String) getValueAt(r, c);
if (jobDisplayed) jobSwitch(c, s);
else resSwitch(c, s);
}
});
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
System.out.println("test");
}
}
});
}
}
這(在我的SpecifiedJTable
類的構造函數站立),但不知何故clickCounter doesn't想達到什麼that's高於1
我很高興任何答案,幫幫我。謝謝。
一般來說,這應該有效。我在自己的代碼中使用類似的東西。可能有一些其他鼠標監聽器在您的表上註冊,這會消耗一些鼠標事件並阻止它們傳播到您的監聽器。 – Enwired
你能更正代碼嗎?作爲它不是它不會編譯。首先請通過更多相關代碼[SSCCE](http://sscce.org/) – Boro
,感謝您的回答。擴展的代碼現在在問題中。 @ user1442870你可以想象這是哪一個,甚至更重要:你有什麼想法來「停止」消耗鼠標事件的其他聽衆?至少tablemodelListener不是問題。我試圖停用它,並且mouseListener畢竟沒有反應。 – user1466944