我試圖做一個JTree時,輸入字符,如字母,數字,標點符號,應用過濾器,裝飾等具有特定的行爲如何禁用JTree上的默認鍵行爲?
一切似乎工作正常,但選擇似乎是當我輸入字母時會自動改變,而且行爲與我的過濾器不一樣。看起來這種行爲在BasicTreeUI.Handler.keyTyped(KeyEvent e)
中定義,我不知道如何避免或輕易忽略這種行爲,並且以獨立於外觀的方式。
有什麼建議嗎?謝謝!
我試圖做一個JTree時,輸入字符,如字母,數字,標點符號,應用過濾器,裝飾等具有特定的行爲如何禁用JTree上的默認鍵行爲?
一切似乎工作正常,但選擇似乎是當我輸入字母時會自動改變,而且行爲與我的過濾器不一樣。看起來這種行爲在BasicTreeUI.Handler.keyTyped(KeyEvent e)
中定義,我不知道如何避免或輕易忽略這種行爲,並且以獨立於外觀的方式。
有什麼建議嗎?謝謝!
在JTree
上有Key Bindings,它們對這些按鍵有反應。下面的代碼片段打印出可用綁定在輸入的一個映射
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JTree;
import javax.swing.KeyStroke;
import java.awt.EventQueue;
public class TreeActionMap {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JTree tree = new JTree();
InputMap inputMap = tree.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
KeyStroke[] keyStrokes = inputMap.allKeys();
for (KeyStroke keyStroke : keyStrokes) {
Object actionCommand = inputMap.get(keyStroke);
System.out.println("keyStroke = " + keyStroke);
System.out.println("actionCommand = " + actionCommand);
}
}
});
}
}
所以,如果你遍歷所有InputMap
情況,並呼籲所有的人clear
,在JTree
不應該再在這些按鍵反應
最深的知識永遠不會...... – mKorbel 2012-08-07 07:07:13
謝謝,實際上這個行爲是在BasicTreeUI.Handler中定義的,它是一個KeyListener。重新定義它是否在關鍵綁定中會更簡單... – 2012-08-07 14:50:17
這工作對我來說:
public class MyJTree extends JTree {
public class MyBasicTreeUi extends BasicTreeUI{
@Override
protected KeyListener createKeyListener() {
return null;
}
...
public MyJTree(){
...
setUI(new MyBasicTreeUi());
...
}
}
注意:我試圖消費的關鍵事件,它沒有幫助。 – 2012-08-06 18:42:56
因此,除了遍歷節點之外,您的密鑰還在執行您的操作嗎?或者他們只是在發生衝突時遍歷節點? – Angie 2012-08-06 20:43:58