java - JTextField.selectAll() 的工作方式很奇怪

标签 java swing jtable jtextfield tablecelleditor

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

  1. 只能编辑第三列的单元格。
  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;
}
}

我的问题是,当我双击不是来自第三列的单元格时,在第三列上编辑的文本不会突出显示为所选文本。

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

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

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

有人可以浇一些光吗?

谢谢!

最佳答案

您可以尝试Table Select All Editor方法。不要忘记查看表全选渲染器

关于java - JTextField.selectAll() 的工作方式很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030261/

相关文章:

java - 是否有一个 Java JSON 库使用与 XMLEncoder 相同的模式

java - Java中JTable自动滚动到底部

java - Swing JTable 黑客

java - MongoDB Spring 的日上限和下限

java - React-Native:WritableMap 的逻辑比较

java - 为什么字符串 "getPriceDisplay"不会出现在我的 JTextField "totalTextField"中?

java - 新手问题: how to access a created JComboBox instance from another method in the same class or else

java - 在java jTable中显示lucene搜索结果

java - struts2使用什么算法来生成随机 token ?

java - Java中的图片转换与矩阵乘法不起作用