私は3つの列の列を持つテーブルを持っています。最後の列には緑色の背景と太字のフォントが必要です。だから、カスタムのTableCellRendererが必要だとわかりました。しかしtable.setDefaultRenderer
と呼ぶと、私のカスタムレンダラーのインスタンスと共にClass columnClass
が検索されます。だから私は値String.class
を与えた。しかし、レンダリングに使用されることはありません。私はgetTableCellRendererComponentメソッドにブレークポイントを設定しました。ヒットしません。cutsom TableCellRendererを使用してセルの背景を変更する
ここで私は、カスタムレンダラ設定されたコードだ - 私が間違っているのは何
public class TableTest extends JPanel implements ActionListener {
MyTableCellRenderer renderer = new MyTableCellRenderer();
MyTableModel model = new MyTableModel();
JTable table = new JTable();
public TableTest() {
super(new GridLayout(1,0));
this.setPreferredSize(new Dimension(800, 800));
model.addRow(Arrays.asList("Testing", "Hello world", "Goodbye"));
model.addRow(Arrays.asList("Testing", "Hello world", "Goodbye"));
table = new JTable(model);
table.setDefaultRenderer(String.class, new MyTableCellRenderer());
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
//Add the scroll pane to this panel.
add(scrollPane);
}
}
public class MyTableCellRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
this.setText(value.toString());
setBackground(Color.GREEN);
setText("Test");
return this;
}
public class MyTableModel extends AbstractTableModel {
private List<String> columnNames = new ArrayList<String>();
private List<List> data = new ArrayList();
{
columnNames.add("Test");
columnNames.add("Test");
columnNames.add("Test");
}
public void addRow(List<String> rowData) {
data.add(rowData);
fireTableRowsInserted(data.size() - 1, data.size() - 1);
}
public int getRowCount() {
return data.size();
}
public int getColumnCount() {
return columnNames.size();
}
public Object getValueAt(int rowIndex, int columnIndex) {
return data.get(rowIndex).get(columnIndex);
}
}
は、なぜセルレンダラーが慣れるdoesntの?
注:他のクラスを含めるように投稿を編集しました。
レンダラー – mKorbel
とMyTableModelのコードはどこですか。 – trashgod
MyTableCellRendererのコードも含めると便利だと思います。あなたのMyTableModelは 'getColumnClass'を実装していますか?もしそうなら、それをデバッグしてそれが戻ってくるクラスを発見してください。 – arooaroo