2016-02-17 5 views
5

Ich habe ein paar JComboBoxes in meinem Programm. Ich möchte die Größe der Bildlaufleiste und der Pfeiltaste in der Weise ändern, dass sie viel breiter sind. Ich brauche das, weil ich das Programm auf einem Windows-Tablet verwenden möchte, und es ist zu klein, um mit einem Finger zu arbeiten. Gibt es eine Möglichkeit, das zu tun?Wie kann man die Scrollelemente einer JComboBox skalieren?

enter image description here

JComboBox comboBox; 
comboBox = new JComboBox(list_apple_device.toArray()); 
comboBox.setSelectedItem(null); 
comboBox.setFont(schrift); 
comboBox.setBounds(1568, 329, 306, 43); 
comboBox.addItemListener(new ItemListener() { 
    @Override 
    public void itemStateChanged(ItemEvent e) { 
     // TODO Auto-generated method stub 
     textField.setText(""+e.getItem()); 
    } 
}); 
getContentPane().add(comboBox); 

Das ist mein Code.

+0

Geben Sie Ihren Code ein ... – Benjamin

+1

Randbemerkung: Dies ist kein JavaScript, Java ist typsicher. Sie können einfach 'toString()' auf Ihrem 'getItem()' aufrufen, anstatt einen String im laufenden Betrieb zu erstellen. Jedes Mal, wenn Sie Zeichenfolgen verketten, füllen Sie den Zeichenfolgenpool. –

+0

Hm, vielleicht wäre JavaFX eine bessere Möglichkeit, mit einem Windows-Tablet zu arbeiten? Denn in JavaFX können Sie CSS verwenden, um die Elemente zu stylen: http://stackoverflow.com/questions/21379865/how-to-hide-the-down-arrow-button-on-a-combobox-in-javafx ... scheint, als ob die Combobox zu klein ist, könnten andere Probleme auftreten, die JavaFX einfacher beheben könnte? – hamena314

Antwort

4

können Sie die UIManger verwenden, um die Breite der Scrollbar zu steuern:

UIManager.put("ScrollBar.width", new Integer(50)); 

Sie würden ausführen, dass Bevor Sie das Kombinationsfeld erstellen.

+0

wow, das ist so viel besser ^^ - Es tut mir wirklich leid, jetzt muss ich dich töten^_^nothing personal =) (+1) –

+0

Interessant, aber ändert das nicht die Breite einer Bildlaufleiste im Programm? Oder könnten Sie das ändern, bevor Sie die Comboboxen erstellen, und den vorherigen Wert nach dem Erstellen der Comboboxen zurückstellen, um die Standardbreite der Scrollleiste beizubehalten? –

+0

Perfekt, vielen Dank! –

3

es ist nicht so einfach, aber es gibt eine Lösung, Sie haben JComboBox Unterklasse ...

Sie haben JComboBox Unterklasse Zugriff auf die ComboBoxUI zu bekommen. Um dies zu tun setzen Sie Ihre eigenen ComboBoxUI während Objekt Instanciation (wir Änderungen an den alle Konstruktoren finden init() in CustomComboBox.

Die ComboBoxUI ist erforderlich, um den Zugang zum ComboboxPopup zu bekommen. Wir ersetzen Sie einfach die Standard-ComboboxPopup mit unseren kundenspezifischen ComboboxPopup. Sie müssen wissen, dass die ComboboxPopup für die Schaffung der Drop-Down-Menü verantwortlich ist, das erscheint, wenn Sie auf den Button klicken.

dann endlich wir die JScrollPane aus dem Popup einstellen können, greifen wir die vertikal JScrollBar und ändern Sie das Aussehen (Einstellung einer benutzerdefinierten Breite).

public class CustomComboBox<T> extends JComboBox<T> { 

    public CustomComboBox() { 
     super(); 
     init(); 
    } 

    public CustomComboBox(ComboBoxModel<T> aModel) { 
     super(aModel); 
     init(); 
    } 

    public CustomComboBox(T[] items) { 
     super(items); 
     init(); 
    } 

    public CustomComboBox(Vector<T> items) { 
     super(items); 
     init(); 
    } 

    public void init(){ 
     CustomComboBoxUI ccbui = new CustomComboBoxUI(); 
     setUI(ccbui); 
    } 

} 

dies ist der Brauch ComboboxUI, die Sie zum ComboboxPopup gewährt acces (ganz einfach):

public class CustomComboBoxUI extends BasicComboBoxUI{ 

    protected ComboPopup createPopup() { 
     return new CustomComboBoxPopup(comboBox); 
    } 

} 

gottlob die individuelle ComboboxPopup Bedürfnisse nur die grundlegenden Konstruktor außer Kraft gesetzt und nur eine Methode geändert (setzt die Größe des die scrollpan zu 40px):

public class CustomComboBoxPopup extends BasicComboPopup{ 

    public CustomComboBoxPopup(JComboBox combo) { 
     super(combo); 
    } 


    @Override 
    protected void configureScroller() { 
     super.configureScroller(); 
     scroller.getVerticalScrollBar().setPreferredSize(new Dimension(40, 0)); 
    }  

} 

die Größe der Combobox setzen Sie müssen einfach nur seine Größe

anpassen
String[] data = new String[]{"a","b","c","d","e","f","g","h","i"}; 
CustomComboBox<String> comboBox = new CustomComboBox(data); 
comboBox.setPreferredSize(new Dimension(50,50)); //set the size you wish 

enter image description here

siehe auch setting size of scroller und setting size of combobox für weitere Hilfe ...

+0

scheint wie ich viel vergessen habe Annotationen '@ Override' Ich bin mir sicher, dass du sie selbst hinzufügen kannst ^^ –