2

セルを透過的にする独自のListCellRenderer(以下のコード)を作成しました。これを実行すると、リストアイテムをクリックするたびに、以前よりも白くなります。JListが常にこの新しいJLabel(私が作成したもの)を追加し、最後のJLabelをオーバーレイするということでしょうか?

    jListPriority.setOpaque(true);
        jListPriority.setBackground(new Color(255, 255, 255, 10));
        jListPriority.setBorder(BorderFactory.createLineBorder(new Color(250, 250, 250)));

        jListPriority.setCellRenderer(new ListCellRenderer() {

                private JLabel label = new JLabel();

                public Component getListCellRendererComponent(JList list, Object value,   
                                 int index, boolean isSelected, boolean cellHasFocus) {

                    label.setOpaque(true);
                    label.setText(value.toString());
                    label.setForeground(new Color(250, 250, 250));
                    label.setFont(new Font("Lucida Grande", Font.PLAIN, 13));
                    label.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(250, 250, 250, 50)));
                    label.setPreferredSize(new Dimension(label.getPreferredSize().width, label.getPreferredSize().height + 3));

                    if (isSelected) {
                        label.setBackground(new Color(255, 255, 255, 20));
                    } else {
                        label.setBackground(new Color(255, 255, 255, 10));
                    }

                    return label;
                }
            });
4

2 に答える 2

3

あまり多くのjlabelインスタンスを作成したくないと思います。この例では、get...メソッドの1回の呼び出しごとにjlabelのインスタンスを1つ作成します。変数labelをフィールドに変換するだけです。

于 2012-11-09T04:45:22.147 に答える
3

のデフォルトのコンポジットはルールをGraphics2D使用するため、結果が期待されます。AlphaComposite.SRC_OVER希望する効果に適したモードを指定する必要があります。この例からいくつかのアイデアを得ることができます。

画像

于 2012-11-09T02:19:21.080 に答える