【问题标题】:JTextField.selectAll() works strangelyJTextField.selectAll() 工作异常
【发布时间】:2013-09-26 13:55:13
【问题描述】:

我正在尝试实现一个必须遵守以下规则的 JTable:

  1. 只能编辑第 3 列的单元格。
  2. 双击 X 行的任意单元格时,X 行的第 3 列将开始编辑。
  3. 每当开始编辑单元格时,其中的文本都会被选中。

我有一个扩展 JTable 的 FileTable。在它的构造函数中,我有以下几行:

getColumnModel().getColumn(2).setCellEditor(new FileTableCellEditor());

addMouseListener(new MouseAdapter(){
        public void mouseClicked(MouseEvent e){
            if (e.getClickCount() == 2){
                int row = rowAtPoint(e.getPoint());
                editCellAt(row, 2);
            }
        }
    } );

我的 FileTableCell 编辑器如下:

public class FileTableCellEditor extends DefaultCellEditor {

public FileTableCellEditor() {
    super(new JTextField());
}

@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    final JTextField ec = (JTextField) editorComponent;     
    String textValue = (String)value;       
    ec.setText(textValue);      
    SwingUtilities.invokeLater( new Runnable() {
        @Override
        public void run() {
            ec.selectAll();
        }
    });     

    return editorComponent;
}
}

我的问题是,当我双击一个不是来自第 3 列的单元格时,在第 3 列上编辑的文本未突出显示为选定文本。

picture http://www.nispahit.com/stack/tableNotHighlight.png

这对我来说很奇怪,因为我知道文本选中。当我写东西时,它会删除该单元格中的文本。它只是没有选择什么。 奇怪的是,当我双击第三列单元格本身时,它确实突出显示了选择。

picture http://www.nispahit.com/stack/tableHighlight.png

谁能给点灯?

谢谢!

【问题讨论】:

  • 如需更好的帮助,请尝试发布SSCCE
  • 第二点尚不清楚,尽管当您阅读更多内容(直到代码之后)时,您才会意识到,第 2 点实际应该发生的事情 :-) +1 表示编辑得很好问题。
  • 因此,是否选择单元格似乎有所不同——尝试在开始编辑之前选择单元格。
  • @Holger,我尝试将选择更改为该单元格,但没有帮助...感谢您的想法 :)

标签: java swing jtable jtextfield tablecelleditor


【解决方案1】:

您可以尝试Table Select All Editor 方法。别忘了查看Table Select All Renderer

【讨论】:

    【解决方案2】:

    您的JTextField 没有突出显示选择,因为它没有聚焦。只需在ec.selectAll(); 之后添加ec.requestFocus();。然后它按预期工作。

    解释:当您单击可编辑列时,Swing 将开始单元格编辑(独立于您的双击侦听器)并将启动事件转发给组件。所以JTextField 收到点击并请求焦点。当您单击不同的列时,只有您的 MouseListener 会启动单元格编辑,并且不会转发该事件。 (转发事件无论如何都无济于事,因为点击在文本字段之外。)所以你必须手动请求焦点。

    【讨论】:

    • 完美运行!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多