2016-02-17 30 views
5

Mam kilka JComboBoxes w moim programie. Chcę zmienić rozmiar paska przewijania i przycisku strzałki w taki sposób, aby były znacznie szersze. Potrzebuję tego, ponieważ chcę korzystać z tego programu na tablecie z systemem Windows i jest on zbyt mały, aby palec mógł z nim pracować. Czy jest taka możliwość?Jak można zmienić rozmiar elementów przewijania w JComboBox?

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); 

To mój kod.

+0

Wpisz swój kod ... – Benjamin

+1

Notatka poboczna: To nie jest JavaScript, Java jest typu bezpiecznego. Możesz po prostu wywołać 'toString()' na 'getItem()' zamiast tworzyć ciąg w locie. Za każdym razem, gdy łączysz ciągi, wypełniasz pulę ciągów. –

+0

Hm, może JavaFX byłby lepszym sposobem pracy z tabletem z systemem Windows? Ponieważ w JavaFX można używać CSS do stylizowania elementów: http://stackoverflow.com/questions/21379865/how-to-hide-the-down-arrow-button-on-a-combobox-in-javafx ... wydaje się, że jeśli combobox jest zbyt mały, mogą pojawić się inne problemy, które JavaFX może naprawić łatwiej? – hamena314

Odpowiedz

4

Można użyć UIManger kontrolować szerokość paska przewijania:

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

Można by wykonać to kod PRZED utworzeniem pola kombi.

+0

wow, to o wiele lepsze ^^ - naprawdę mi przykro, teraz muszę cię zabić^_^nic osobisty =) (+1) –

+0

Interesujące, ale czy to nie zmieni szerokości paska przewijania w programie? Czy możesz to zmienić przed utworzeniem comboboxów i przywrócić poprzednią wartość po utworzeniu comboboxów, aby zachować domyślną szerokość paska przewijania? –

+0

Doskonały, wielkie dzięki! –

3

to nie jest tak łatwe, ale nie jest to rozwiązanie, trzeba podklasy JComboBox ...

Trzeba podklasy JComboBox, aby uzyskać dostęp do ComboBoxUI. Aby to zrobić można ustawić swój własny ComboBoxUI podczas obiektu instanciation (wykonujemy zmiany w wszystkich konstruktorów, zobacz init() w CustomComboBox.

ComboBoxUI jest wymagane, aby uzyskać dostęp do ComboboxPopup. Zamieniamy prostu domyślne ComboboxPopup z naszym zwyczajem ComboboxPopup. trzeba wiedzieć, że ComboboxPopup jest odpowiedzialny za utworzenie listy rozwijalnej menu, które pojawia się po kliknięciu na przycisk.

potem wreszcie można regulować JScrollPane z Podręczne, możemy chwycić pionowe JScrollBar i zmień jego wygląd (ustawienie niestandardowej szerokości)

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); 
    } 

} 

to zwyczaj ComboboxUI że udziela Ci Dostęp do ComboboxPopup (dość proste):

public class CustomComboBoxUI extends BasicComboBoxUI{ 

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

} 

thankgod zwyczaj ComboboxPopup potrzeby tylko podstawowe konstruktor nadpisane i tylko jeden sposób zmienione (ustawia rozmiar scrollpan do 40 pikseli):

public class CustomComboBoxPopup extends BasicComboPopup{ 

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


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

} 

aby ustawić rozmiar combobox wystarczy dostosować jej wielkość

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

zobaczyć również setting size of scroller i setting size of combobox dla dalszej pomocy ...

+0

wydaje się, że zapomniałem wiele adnotacje '@ Zastąpienie' Jestem pewien, że możesz je dodać samemu ^^ –