2013-10-28 22 views
7

'da metni hizalamanın herhangi bir yolu var Sağa hizalanmış bir JComboBox sahibi olmak istiyorum. bunu nasıl yapabilirim? Birisi daha önce "Bir JLabel # setHorizontalAlignment (JLabel.RIGHT) olan bir JLabel olabilir JComboBox için bir oluşturucu ayarlayabilirsiniz" ama bunu nasıl yapabilirim bilmiyorum?Bir JCombobox

cevap

13

birisi önce olabilen JComboBox bir renderer ayarlayabilirsiniz" diyen bir JLabel sahip JLabel # setHorizontalAlignment (JLabel.RIGHT) "

Evet, varsayılan yenileyici bir JLabel'dir, bu nedenle özel bir oluşturucu oluşturmanız gerekmez. Sadece kullanabilirsiniz:

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

+1, cevabınız benimkinden daha iyidir, bu bilgiler için teşekkürler. – UDPLover

+0

Idk ... Bence daha iyi bir cevap, iki cevabınızın bir kombinasyonu olabilir. Özellikle, cevabınız benim için daha faydalıdır çünkü kendi özel oluşturucamı kullanıyorum. Öte yandan, Modelde (veya combobox'taki nesneler için yeterince iyi olsa da toString()) düz bir dizi Strings kullanıp kullanmadığınızı anlayabiliyorum, bunu yapmak daha yararlı olacaktır. – searchengine27

6

Eh, böyle, ListCellRenderer ile yapabilirsiniz:

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

Teşekkür ederim Meraman –

+0

Yönlendirmeyi seçemiyorum * CENTER * !! Sadece soldan sağa ve sola doğru – shareef

0

Bu çalıştı beni güzel ve

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

(Grafik) çağrısı, ayrıca kullanabilirsiniz anonim yapıcı bloğu her boya ayarlayıcıları önlemek için kısa:

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