java - 接受表中 JTextField 和 JTextArea 的焦点

标签 java swing jtable tablecellrenderer tablecelleditor

我有一个三列 JTable:一个不可编辑的 JTextField、一个可编辑的 JTextArea 和一个可编辑的 JTextField。

我的问题是双重的。我希望最后两列在背景突出显示并准备好进行编辑,当我使用选项卡进入它们时,可以使用可见的光标。他们还使用特定的字体;因此有了自定义渲染器和编辑器。

如果我在其中一个单元格中单击两次,我就会成功,但如果我使用键盘到达那里,则不会成功。我可以从一个单元格切换到另一个单元格(感谢 JTextArea 的 setTraversalKeys 调用)并开始输入,但焦点在哪里并不明显。

我有一个焦点事件监听器,它可以在触发它的任何组件上设置背景颜色。它用于用于单元格编辑的 JTextField 和 JTextArea,以及用于良好测量的单元格渲染器。但只有点击鼠标才会触发它们。

如何确保在我按 Tab 键进入的单元格上触发焦点事件?

谢谢。

最佳答案

您应该听取选择更改并在需要的地方开始编辑:

    final JTable table = new JTable (
            new String[][]{ { "col1", "col2", "col3" }, { "col1", "col2", "col3" } },
            new String[]{ "1", "2", "3" } );
    ListSelectionListener listener = new ListSelectionListener ()
    {
        public void valueChanged ( ListSelectionEvent e )
        {
            if ( table.getSelectedRow () != -1 && table.getSelectedColumn () != -1 )
            {
                table.editCellAt ( table.getSelectedRow (), table.getSelectedColumn () );
            }
        }
    };
    table.getColumnModel ().getSelectionModel ().addListSelectionListener ( listener );
    table.getSelectionModel ().addListSelectionListener ( listener );

这只是一个如何做到这一点的示例。

关于java - 接受表中 JTextField 和 JTextArea 的焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558758/

相关文章:

java - 更新文本区域 Swing Java

java - 与Java语法相关的非常简单的问题

java - 如何将复选框添加到 JTABLE swing

java - 在 JTable 中显示 HTML

java - 如果用户关闭单独的窗口,为什么我的应用程序会终止?

java - sendMessage() 方法在哪里找?

java - 异常org.hibernate.exception.GenericJDBCException : could not extract ResultSet while feching data using hql

java - JLabel 没有出现

java - 有没有办法将对象添加到 JComboBox 并分配一个要显示的字符串?

java - 仅具有垂直滚动的 JPanel 和 JScrollPane