【发布时间】:2011-04-23 08:37:55
【问题描述】:
我正在尝试渲染我的 jtable 的特定行(它应该有不同的背景颜色并且应该有粗体字符)。
我发现了几个关于如何实现自定义TableCellRenderer(here 和here)和教程How to Use Tables 和这个(Table Row Rendering)的问题。
我使用JInternalFrame 来显示JTable。我尝试实现这两种解决方案,但都没有调用 getCellRenderer 和 prepareRenderer。调试时,我可以看到我的新 jtable 正在创建,但是我的方法内部的断点没有被调用。
我的代码如下:
this.add(createData(model));
private JComponent createData(ProfitLossTableModel model) {
JTable table = new JTable(model) {
public TableCellRenderer getCellRenderer(int row, int column) {
if ((row == 0) && (column == 0)) {
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(JLabel.RIGHT);
renderer.setBackground(Color.red);
return renderer;
} else {
return super.getCellRenderer(row, column);
}
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.changeSelection(0, 0, false, false);
table.setAutoCreateRowSorter(true);
return new JScrollPane(table);
}
如您所见,模型是我对AbstractTableModel 的实现。
当然,我错过了一些东西。我试图打电话给repaint() 看看有没有发生什么,但什么也没发生。
我还尝试在我的 JInternalFrame 中放置一个 JPane,然后他们将 JScrollPane 添加到其中,但也没有任何反应。
有什么帮助吗?
TIA,
鲍勃
【问题讨论】:
-
您发布的代码看起来不错。但是,我们不知道您如何实际使用此代码的上下文。因此,您的第一项工作是使用 DefaultTableModel 创建一个 SSCCE (sscce.org) 并查看是否可以使代码正常工作。如果不是,您发布整个 15 行 SSCCE 程序,以便我们可以准确地看到您在做什么。一旦成功,您可以尝试使用您的自定义 TableModel。
标签: java swing jtable cellrenderer