1

所以我想在我的 JTable 中添加一个带有背景颜色的空 JLabel。这是一个饼图,我想添加它以便图例匹配。

代码:

for (String result : queryResult) {

            JLabel label = new JLabel("Hallo: "+rowCount);
            label.setBackground(colors[rowCount]);
            label.setOpaque(true);

            String queryResultString = "";
            queryResultString = result.toString();
            String[] lineArray = queryResultString.split("////");

            String[] pieData = new String[3];

            pieData[0] = lineArray[0];
            pieData[1] = lineArray[rangId - 1];

            int value = Integer.parseInt(pieData[1]);
            double percentage = value / total * 100;

            pieData[2] = "" + percentage + "%";

            pieModel.addRow(new Object[] {label, pieData[0], pieData[1], pieData[2]});

            rowCount++;
        }

        pieTable.setDefaultRenderer(String.class, new DefaultTableCellRenderer() {

            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){

                if(value instanceof JLabel){
                    //This time return only the JLabel without icon
                    return (JLabel)value;
                }else{
                    return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                }
            }
        });

我究竟做错了什么?:o

当我查看表格第一列的结果时,它说:

javax.swing.JLabel[,0,0,0...... 看不到其余部分,但它肯定不能正常工作!:(

4

3 回答 3

5

所以我想在我的 JTable 中添加一个带有背景颜色的空 JLabel。这是一个饼图,我想添加它以便图例匹配。

默认情况下你不能这样做RendererComponentJComponent或者JLabel

于 2012-05-28T12:49:08.533 回答
3

JTable 中的每个单元格都已经是一个 JLabel。您需要自定义 getTableCellRendererComponent 以返回具有适当背景颜色设置的 super.getTableCellRendererComponent 以达到您想要的效果。

于 2012-05-28T12:48:10.663 回答
2

DefaultTableCellRenderer继承自JLabel(继承自JComponent)。因此,您可以在getTableCellRendererComponent.

例如

ImageIcon icon = new ImageIcon(getClass().getResource("images/moon.gif"));// prepared before

public Component getTableCellRendererComponent(JTable table, Object value,
                                             boolean isSelected, boolean hasFocus, 
                                             int row, int column) {     
    setText((String)value);
    setIcon(icon);
    return this;
}

setText来自超级 JLabel 类和setIcon超级 JComponent 类。

几乎所有DefaultTableCellRenderer方法都会覆盖这些类中的方法。

于 2012-05-28T13:14:35.407 回答