我正在尝试实现一个必须遵守以下规则的 JTable:
- 只能编辑第三列的单元格。
- 双击 X 行中的任意单元格时,X 行的第 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/