【发布时间】:2013-09-26 13:55:13
【问题描述】:
我正在尝试实现一个必须遵守以下规则的 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 列上编辑的文本未突出显示为选定文本。
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