'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
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);
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);
}
});
}
}
Teşekkür ederim Meraman –
Yönlendirmeyi seçemiyorum * CENTER * !! Sadece soldan sağa ve sola doğru – shareef
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);
}
});
+1, cevabınız benimkinden daha iyidir, bu bilgiler için teşekkürler. – UDPLover
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