9

右揃えの JComboBox が必要です。どうやってやるの?前に誰かが「JLabel#setHorizo​​ntalAlignment(JLabel.RIGHT)を持つJLabelであるJComboBoxにレンダラーを設定できます」と言いましたが、どうすればそれができるのかわかりませんか?

4

3 に答える 3

17

誰かが前に言った「JLabel#setHorizo​​ntalAlignment(JLabel.RIGHT)を持つJLabelであるJComboBoxにレンダラーを設定できます」

はい、デフォルトのレンダラーは JLabel であるため、カスタム レンダラーを作成する必要はありません。あなたはただ使うことができます:

((JLabel)comboBox.getRenderer()).setHorizontalAlignment(JLabel.RIGHT);
于 2013-10-28T18:48:05.717 に答える
7

さて、次のように ListCellRenderer を使用できます。

import java.awt.Component;
import java.awt.ComponentOrientation;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;

public class ComboboxDemo extends JFrame{
    public ComboboxDemo(){
        JComboBox<String> comboBox = new JComboBox<String>();
        comboBox.setRenderer(new MyListCellRenderer());
        comboBox.addItem("Hi");
        comboBox.addItem("Hello");
        comboBox.addItem("How are you?");

        getContentPane().add(comboBox, "North");
        setSize(400, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    private static class MyListCellRenderer extends DefaultListCellRenderer {
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
            Component component = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
            component.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
            return component;
        }
    }

    public static void main(String [] args){
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new ComboboxDemo().setVisible(true);
            }
        });
    }
}
于 2013-10-28T17:59:33.203 に答える
0

これは私のためにうまくいきました

comboFromDuration.setRenderer(new DefaultListCellRenderer() {
            @Override
            public void paint(Graphics g) {
                setHorizontalAlignment(DefaultListCellRenderer.CENTER);
                setBackground(Color.WHITE);
                setForeground(Color.GRAY);  
                setEnabled(false);
                super.paint(g);
            }
        });

すべての paint(Graphics) 呼び出しでセッターを回避するには、匿名コンストラクター ブロックを使用することもできます。

comboFromDuration.setRenderer(new DefaultListCellRenderer() {
    {
        setHorizontalAlignment(DefaultListCellRenderer.CENTER);
        setBackground(Color.WHITE);
        setForeground(Color.GRAY);  
        setEnabled(false);
    }
});
于 2015-05-10T09:14:59.677 に答える