我正在執行撤消/重做功能到我的JTable中,但我有一個JTable的默認行爲的問題,它開始在任何按鍵上編輯單元格。如何防止JTable單元在某些擊鍵上開始編輯?
的問題是,它也開始在CTRL +ž和 CTRL +Ÿ編輯。
如何在按下這兩個鍵時防止單元格編輯?
注意:我有一個面板內有多個表的多個面板,我試過重寫isCellEditable()
但失敗。
我正在執行撤消/重做功能到我的JTable中,但我有一個JTable的默認行爲的問題,它開始在任何按鍵上編輯單元格。如何防止JTable單元在某些擊鍵上開始編輯?
的問題是,它也開始在CTRL +ž和 CTRL +Ÿ編輯。
如何在按下這兩個鍵時防止單元格編輯?
注意:我有一個面板內有多個表的多個面板,我試過重寫isCellEditable()
但失敗。
此示例阻止上CTRL + Ž和CTRL + ý正在編輯的細胞。它通過這樣做:
CellEditor.isCellEditable
KeyEvent
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.util.EventObject;
import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellEditor;
public class JTableWithCtrlZ {
private JTableWithCtrlZ() {}
@SuppressWarnings("serial")
private static JTable createTable() {
return new JTable(10, 10) {
@Override
public TableCellEditor getDefaultEditor(Class<?> columnClass) {
return new DefaultCellEditor(new JTextField()) {
@Override
public boolean isCellEditable(EventObject anEvent) {
if(anEvent instanceof KeyEvent) {
KeyEvent ke = (KeyEvent) anEvent;
if((ke.getKeyCode() == KeyEvent.VK_Z || ke.getKeyCode() == KeyEvent.VK_Y) &&
(ke.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) == KeyEvent.CTRL_DOWN_MASK)
return false;
}
return super.isCellEditable(anEvent);
}
};
}
};
}
public static JFrame createFrame() {
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.add(new JScrollPane(createTable()), BorderLayout.CENTER);
p.setPreferredSize(new Dimension(250, 150));
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(p);
f.pack();
return f;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createFrame().setVisible(true);
}
});
}
}
這是我一直在尋找。非常感謝! –
@MilosMisic當然歡迎您。我只回答你阻止編輯的部分。捕捉關鍵事件以撤銷/重做是另一回事。 –
它已經在我的項目中並且完全正常工作。 :) –
在CTRL + Z和CTRL + Y上會發生什麼? – XtremeBaumer
選定的單元格開始編輯並將按下的字符添加到它。 –
請[編輯]你的問題,並添加上面的說明。其他用戶可能不會閱讀評論。 [-From Review](http://stackoverflow.com/review/first-posts/14579036) – xenteros