gpt4 book ai didi

java - 使用自定义 TableCellRenderer 更改单元格的背景

转载 作者:行者123 更新时间:2023-12-01 06:56:56 24 4
gpt4 key购买 nike

我有一个包含三列字符串的表。我希望最后一列具有绿色背景和粗体字体。所以我想我需要一个自定义的 TableCellRenderer。但是,当我调用 table.setDefaultRenderer 时,它会查找 Class columnClass 以及我的自定义渲染器的实例。所以我给了它值String.class。但它不用于渲染,我在它的 getTableCellRendererComponent 方法中设置了一个断点,但它没有被命中。

这是我设置自定义渲染器的代码 -

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);
}

}

我做错了什么,为什么单元格渲染器没有被使用?

注意:我已编辑该帖子以包含其他类(class)。

最佳答案

检查您的TableModel.getColumnClass(int col),也许它返回Object.class。那么你需要用Object.class而不是String.class来注册渲染器,即:

table.setDefaultRenderer(Object.class, new MyTableCellRenderer());

关于java - 使用自定义 TableCellRenderer 更改单元格的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com