在我的Java应用程序中,我想设置颜色以及选择颜色时的行为。为此,我编写了TableCellRenderer的自定义实现,并且可以根据需要运行。但是我仍然有些困惑...
这是TableCellRenderer
的实现:
public class AccountMovementTableCellRenderer extends JLabel implements TableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
//My implementation here...
return this;
}
}
在这里创建
JTable
:AccountMovementTableCellRenderer accountMovementCellRenderer = new AccountMovementTableCellRenderer();
entryTable = new JTable(entryModel){
private static final long serialVersionUID = 1L;
@Override
public TableCellRenderer getCellRenderer(int row, int column){
return accountMovementCellRenderer;
}
};
我只创建一个CellRenderer实例,但是我期望每个单元格一个CellRenderer,但我很惊讶它以这种方式工作...每个单元格的内容和颜色都不相同,但是它始终使用相同的CellRenderer实例,因此能行吗?
最佳答案
TableCellRenderer.prepareRenderer
返回的Component被重用以呈现JTable
的内容-在您的情况下,渲染器扩展了JLabel
(您可能只是扩展了DefaultTableCellRenderer
)-此JLabel用于绘制JTable
。 prepareRenderer
方法用于在渲染之前为每个单元格定制JLabel。引用Oracle's tutorial on the JTables
您可能希望表中的每个单元格都是一个组件。但是,出于性能原因,Swing表的实现方式有所不同。
取而代之的是,通常使用单个单元格渲染器来绘制包含相同类型数据的所有单元格。您可以将渲染器视为可配置的墨水戳,表格使用该墨水戳将格式正确的数据标记到每个单元格上。当用户开始编辑单元格的数据时,单元格编辑器将接管该单元格,从而控制该单元格的编辑行为。
关于java - 使用自定义TableCellRenderer Swing JTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39153879/