在我的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用于绘制JTableprepareRenderer方法用于在渲染之前为每个单元格定制JLabel。引用Oracle's tutorial on the JTables


  您可能希望表中的每个单元格都是一个组件。但是,出于性能原因,Swing表的实现方式有所不同。
  
  取而代之的是,通常使用单个单元格渲染器来绘制包含相同类型数据的所有单元格。您可以将渲染器视为可配置的墨水戳,表格使用该墨水戳将格式正确的数据标记到每个单元格上。当用户开始编辑单元格的数据时,单元格编辑器将接管该单元格,从而控制该单元格的编辑行为。

关于java - 使用自定义TableCellRenderer Swing JTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39153879/

10-10 09:53