2013-10-28 14 views

Antwort

13

jemand vorher gesagt: „Du einen Renderer zum JComboBox festlegen können, welcher sein kann ein JLabel mit JLabel # setHorizontalAlignment (JLabel.RIGHT) "

Ja, der Standard Renezerer ist ein JLabel, so dass Sie keinen benutzerdefinierten Renderer erstellen müssen. Sie können einfach verwenden:

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

+1, ist Ihre Antwort besser als meins, danke für diese Information. – UDPLover

+0

Idk ... Ich denke, eine bessere Antwort wäre immer noch eine Kombination aus Ihren beiden Antworten. Insbesondere ist Ihre Antwort für mich nützlicher, weil ich meinen eigenen benutzerdefinierten Renderer verwende. Auf der anderen Seite kann ich sehen, wie wenn Sie nur ein einfaches Array von Strings im Modell verwenden (oder die toString() für die Objekte in der Combobox ist gut genug), dann wäre es sinnvoller, dies zu tun. – searchengine27

6

Nun können Sie mit ListCellRenderer tun, wie folgt aus:

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

Vielen Dank Meraman –

+0

Ich kann die Orientierung nicht wählen * CENTER * !! nur von links nach rechts und von rechts nach links – shareef

0

Das funktionierte für mich schön kurz

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

Um die Setter auf jeder Farbe (Graphics) Aufruf zu vermeiden, können Sie auch einen anonymen Konstruktor Block verwenden:

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