2013-10-28 32 views
7

JComboBoxを右揃えにしたいと思います。どうやってやるの? 誰かが前に私は、私はそれをどのように行うことができますかわからない「あなたはJLabelの#setHorizo​​ntalAlignmentを持つのJLabel(JLabel.RIGHT)することができJComboBoxのにレンダラを設定することができます」と述べましたか?JComboboxのテキストを右揃えにする方法はありますか?

答えて

13

誰かが前にあなたがすることができたのJComboBoxにレンダラを設定することができます」と述べたJLabelの持つJLabelの#setHorizo​​ntalAlignment(JLabel.RIGHT) "

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

((JLabel)comboBox.getRenderer()).setHorizontalAlignment(JLabel.RIGHT); 
+0

+1、あなたの答えは私のものよりも優れています。 – UDPLover

+0

Idk ...私はもっと良い答えはまだあなたの2つの答えの組み合わせだろうと思う。特に私自身のカスタムレンダラーを使用しているので、あなたの答えは私にとってより有益です。一方、私はあなたがModel(またはコンボボックス内のオブジェクトのtoString())で文字列のプレーンな配列を使用しているだけであれば、これを行う方がより便利だろう。 – searchengine27

6

さて、あなたはこのように、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); 
      } 
     }); 
    } 
} 
+0

ありがとうございましたMeraman –

+0

私は方向を選択できません* CENTRE * !!左から右、右から左へ – shareef

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); 
      } 
     }); 

を素晴らしく、短い働い呼び出し、あなたはまた、匿名のコンストラクタブロックを使用することができます。

comboFromDuration.setRenderer(new DefaultListCellRenderer() { 
    { 
     setHorizontalAlignment(DefaultListCellRenderer.CENTER); 
     setBackground(Color.WHITE); 
     setForeground(Color.GRAY); 
     setEnabled(false); 
    } 
});