我正在从使用TableDialogEditDemo.java示例类的这个oracle 教程中学习
我为 JTable 编写了一个自定义单元格渲染器和编辑器。
我将它们注册到这个 Oracle TableDialogEditDemo.java类
...
...
//Set up renderer and editor for the Favorite Color column.
table.setDefaultRenderer(Color.class,
new ColorRenderer(true));
table.setDefaultEditor(Color.class,
new ColorEditor());
TableColumn c = table.getColumnModel().getColumn(2);
c.setCellRenderer(new CellStringRenderer()); //My custom Renderer
c.setCellEditor(new CellStringEditor()); // My custom Editor
//Add the scroll pane to this panel.
add(scrollPane);
...
...
(更新的描述)当我点击一个单元格时,会弹出一个输入对话框,这没关系,当我输入一个文本并单击“确定”时,JTable 中的单元格会更新,但文本没有正确显示/呈现,我必须单击任何其他单元格才能使单元格中的文本内容正确显示。
我的代码有什么问题?
我的渲染器
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
public class CellStringRenderer extends JLabel implements TableCellRenderer
{
public CellStringRenderer()
{
this.setOpaque(true);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
String stringValue = (String) value;
this.setText(stringValue);
return this;
}
}
我的编辑器(更新)
import java.awt.Component;
import javax.swing.*;
import javax.swing.table.TableCellEditor;
public class CellStringEditor extends AbstractCellEditor
implements TableCellEditor
{
String input;
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
if (isSelected)
{
JOptionPane dialog = new JOptionPane();
input = dialog.showInputDialog(null, "new value");
return dialog;
}
return null;
}
@Override
public Object getCellEditorValue()
{
return input;
}
}