2016-02-17 8 views
5

Ho alcuni JComboBoxes nel mio programma. Voglio cambiare la dimensione della barra di scorrimento e il pulsante freccia nel modo in cui sono molto più larghi. Ho bisogno di questo perché voglio usare il programma su un tablet Windows ed è troppo piccolo per un dito con cui lavorare. C'è qualche possibilità di farlo?Come si può ridimensionare gli elementi scroll di un 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); 

Questo è il mio codice.

+0

Inserisci il tuo codice ... – Benjamin

+1

Side-note: Questo non è JavaScript, Java è sicuro dal tipo. Puoi semplicemente chiamare 'toString()' sul tuo 'getItem()' piuttosto che creare una stringa al volo. Ogni volta che si concatenano le stringhe, si sta compilando il pool di stringhe. –

+0

Hm, forse JavaFX sarebbe un modo migliore per lavorare con un tablet Windows? Perché in JavaFX puoi usare i CSS per modellare gli elementi: http://stackoverflow.com/questions/21379865/how-to-hide-the-down-arrow-button-on-a-combobox-in-javafx ... sembra che se la casella combinata sia troppo piccola, potrebbero sorgere altri problemi che JavaFX potrebbe risolvere più facilmente? – hamena314

risposta

4

È possibile utilizzare l'UIManger per controllare la larghezza della barra di scorrimento:

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

si eseguirà che codice PRIMA di creare la casella combinata.

+0

wow che è molto meglio ^^ - mi dispiace davvero, ora devo ucciderti^_^nothing personal =) (+1) –

+0

Interessante, ma non cambierà la larghezza di qualsiasi barra di scorrimento nel programma? Oppure potresti cambiarlo prima di creare le caselle combinate e riportare il valore precedente dopo aver creato le caselle combinate per mantenere la larghezza della barra di scorrimento predefinita? –

+0

Perfetto, grazie mille! –

3

non è così facile, ma c'è una soluzione, si deve creare una sottoclasse JComboBox ...

Devi sottoclasse JComboBox per ottenere l'accesso al ComboBoxUI. Per fare in modo da impostare il proprio personalizzato ComboBoxUI durante oggetto instanciation (facciamo cambiamenti nelle tutti i costruttori, vedere init() in CustomComboBox.

Il ComboBoxUI è necessario per ottenere l'accesso al ComboboxPopup. Sostituiamo semplicemente il default ComboboxPopup con il nostro costume ComboboxPopup. dovete sapere che il ComboboxPopup è responsabile per la creazione del down-menu, che si apre quando si fa clic sul pulsante.

allora abbiamo finalmente possibile regolare la JScrollPane dal Popup, abbiamo afferrare la verticale JScrollBar e alterarne l'aspetto (impostando una larghezza personalizzata)

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

} 

questo è l'usanza ComboboxUI che le sovvenzioni si Accesso agli ComboboxPopup (abbastanza semplice):

public class CustomComboBoxUI extends BasicComboBoxUI{ 

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

} 

thankgod l'usanza ComboboxPopup esigenze solo il costruttore di base sovrascritto e solo un metodo modificato (imposta la dimensione lo scrollpan a 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)); 
    }  

} 

per impostare la dimensione della casella combinata è sufficiente per regolare le dimensioni

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

vedi anche setting size of scroller e setting size of combobox per ulteriori informazioni ...

+0

sembra che ho dimenticato un sacco di annotazioni '@ Override' sono sicuro che puoi aggiungerle su te stesso ^^ –

Problemi correlati