如何在JTable中添加JLabel?

时间:2012-05-28 12:42:28

标签: java swing jtable

所以我想为我的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);
                }
            }
        });

我做错了什么? :○

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

javax.swing.JLabel中[,0,0,0 ...... 看不到剩下的,但它绝对不能正常工作! :(

3 个答案:

答案 0 :(得分:5)

  

所以我想为我的JTable添加一个带背景颜色的空JLabel。这是一个饼图,我想添加这个以便传说匹配。

默认情况下,ComponentJComponentJLabel

,您无法执行此操作Renderer

答案 1 :(得分:3)

JTable中的每个单元格都已经是JLabel。您需要自定义getTableCellRendererComponent以返回具有适当背景颜色集的super.getTableCellRendererComponent,以实现您的目标效果。

答案 2 :(得分:2)

DefaultTableCellRenderer继承自JLabel(继承自JComponent)。因此,您可以在getTableCellRendererComponent中更改JLabel属性。

For example

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方法都会覆盖这些类的方法。