gpt4 book ai didi

java - 使用自定义 TableCellRenderer 的 Swing JTable

转载 作者:行者123 更新时间:2023-12-01 16:51:32 27 4
gpt4 key购买 nike

在我的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 返回的组件被重用来渲染 JTable 的内容 - 在您的情况下,您的渲染器扩展了 JLabel (您可以只扩展 DefaultTableCellRenderer) - 此 JLabel 用于绘制 JTable 的内容。 prepareRenderer 方法用于在渲染之前为每个单元格自定义 JLabel。引用Oracle's tutorial on the JTables

You might expect each cell in a table to be a component. However, for performance reasons, Swing tables are implemented differently.

Instead, a single cell renderer is generally used to draw all of the cells that contain the same type of data. You can think of the renderer as a configurable ink stamp that the table uses to stamp appropriately formatted data onto each cell. When the user starts to edit a cell's data, a cell editor takes over the cell, controlling the cell's editing behavior.

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

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