Ich möchte eine JComboBox mit rechts ausrichten haben. wie kann ich das machen? jemand vor "Sie können einen Renderer auf die JComboBox setzen, die ein JLabel mit JLabel sein kann # setHorizontalAlignment (JLabel.RIGHT)" aber ich weiß nicht, wie kann ich das tun?Gibt es eine Möglichkeit, den Text in einer JCombobox richtig auszurichten
Antwort
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);
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);
}
});
}
}
Vielen Dank Meraman –
Ich kann die Orientierung nicht wählen * CENTER * !! nur von links nach rechts und von rechts nach links – shareef
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);
}
});
+1, ist Ihre Antwort besser als meins, danke für diese Information. – UDPLover
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