我有許多JTable的自定義編輯器,這是一個輕描淡寫的說可用性,特別是關於編輯鍵盤,缺乏。JTable與一個複雜的編輯器
主要的原因是我的編輯始終具有相似(雖然往往更復雜)的情況創建這樣的:
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JPanel container = new JPanel();
container.setLayout(new BorderLayout());
container.add(field, BorderLayout.CENTER);
field.setText((String) value);
container.add(new JButton("..."), BorderLayout.EAST);
return container;
}
即與內部多個組件的面板。實際的文本編輯器是作爲編輯器返回的組件的後代。 因此,從我所知道的問題來看,JTable正在關注由getTableCellEditorComponent
方法返回的組件,因此當您按下一個突出顯示的單元格的按鍵時,它將焦點和按鍵按下到面板上,認爲這是編輯。
反正我可以通知JTable「真實」編輯器是JTextfield嗎? 在正確的組件上添加hacky requestFocusInWindow
是不夠的,因爲按鍵不會傳遞。
感謝您的回答。一段時間以來,我們一直在這樣做(對不同的編輯者以不同的方式),這讓我們陷入了各種各樣的麻煩中(例如編輯器被鼠標激活並且表鍵控偵聽器仍然有一個lastKeyPressed)。一種尋找更好的解決方案。 – 2009-02-19 19:22:40
我一直在進一步研究它,最終結果在內部類
BasicTableUI
。儘管沒有代碼示例。 – Barend 2009-02-19 20:11:03