栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JTable在按键上编辑

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JTable在按键上编辑

避免使用

KeyListener
,它在关注焦点和调度事件的顺序方面是不可靠的(有可能在侦听器之前消耗了它们的密钥,因此永远不会收到通知)。

使用键绑定,而不是

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);ActionMap am = table.getActionMap();KeyStroke enterKey = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);im.put(enterKey, "Action.enter");am.put("Action.enter", new AbstractAction() {    public void actionPerformed(ActionEvent evt) {        table.changeSelection(table.getSelectedRow(), 2, false, false);        if (!table.editCellAt(table.getSelectedRow(), 2)) { JOptionPane.showMessageDialog(table, "Failed to start cell editing");        }    }});

我也对此

myTab.changeSelection(myTab.getSelectedRow(), 2, true,false);
电话表示怀疑。JavaDocs基本上说…

切换:true,扩展:false。如果选择了指定的单元格,请取消选择它。如果未选中,请选择它。

这提示我,如果当前选中该单元格,则将其取消选中。

更新了工作示例

public class TestTableEditor {    public static void main(String[] args) {        new TestTableEditor();    }    private JTable table;    public TestTableEditor() {        EventQueue.invokeLater(new Runnable() { @Override public void run() {     try {         UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());     } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {     }     table = new JTable(new MyTableModel());     InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);     ActionMap am = table.getActionMap();     KeyStroke enterKey = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);     im.put(enterKey, "Action.enter");     am.put("Action.enter", new AbstractAction() {         public void actionPerformed(ActionEvent evt) {  table.changeSelection(table.getSelectedRow(), 1, false, false);  if (!table.editCellAt(table.getSelectedRow(), 1)) {      JOptionPane.showMessageDialog(table, "Failed to start cell editing");  }         }     });     Jframe frame = new Jframe();     frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);     frame.setLayout(new BorderLayout());     frame.add(new JScrollPane(table));     frame.pack();     frame.setLocationRelativeTo(null);     frame.setVisible(true); }        });    }    public class MyTableModel extends AbstractTableModel {        @Override        public int getRowCount() { return 1;        }        @Override        public int getColumnCount() { return 3;        }        @Override        public Object getValueAt(int rowIndex, int columnIndex) { Object value = null; switch (columnIndex) {     case 0:         value = "Can't edit";         break;     case 1:         value = "Edit me";         break;     case 2:         value = "Can't edit";         break; } return value;        }        @Override        public boolean isCellEditable(int rowIndex, int columnIndex) { return columnIndex == 1;        }    }}

更新

在所有愚蠢,痛苦,难以找到的…

添加

table.setSurrendersFocusonKeystroke(true);
到您的代码…

设置当由于单元格的JTable转发键盘事件而激活编辑器时,此JTable中的编辑器是否获得键盘焦点。默认情况下,此属性为false,除非单击该单元格,否则JTable保留焦点。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号