我正在尝试实现一个必须遵守以下规则的 JTable:
- 只能编辑第 3 列的单元格。
- 双击 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;
}
}
我的问题是当我双击不是来自第 3 列的单元格时,在第 3 列上编辑的文本未突出显示为选定文本。
图片 http://www.nispahit.com/stack/tableNotHighlight.png
这对我来说很奇怪,因为我知道文本被选中。当我写东西时,它会删除该单元格中的文本。它只是没有选择什么。奇怪的是,当我双击第三列单元格本身时,它确实突出显示了选择。
图片 http://www.nispahit.com/stack/tableHighlight.png
有人可以倒一些光吗?
谢谢!