TableDialogEditDemo.javaサンプルクラスを使用するこのOracleチュートリアルから学んでいます
JTable用のカスタムセルレンダラーとエディターを作成しました。
これらをこのOracleTableDialogEditDemo.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);
...
...
(説明を更新)セルをクリックすると入力ダイアログボックスが表示されてOKです。テキストを入力して[OK]をクリックすると、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;
}
}