1

そこで、背景色の空のJLabelをJTableに追加したいと思います。円グラフ用で、凡例が一致するようにこれを追加したいと思います。

コード:

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

So i want to add a empty JLabel with a Background color to my JTable. It's for a piechart and i want to add this so the legend matches.

you can't do that Renderer by default returs Component, JComponent or JLabel

于 2012-05-28T12:49:08.533 に答える
3

Every cell in JTable is already a JLabel. You need to customize getTableCellRendererComponent to return super.getTableCellRendererComponent with proper background color set to achieve the effect you are aiming for.

于 2012-05-28T12:48:10.663 に答える
2

DefaultTableCellRendererから継承するJLabel(から継承するJComponent)。したがって、 内で JLabel プロパティを変更できます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 に答える