2016-02-17 5 views
5

У меня есть несколько JComboBoxes в моей программе. Я хочу изменить размер полосы прокрутки и кнопки со стрелкой так, чтобы они были намного шире. Мне нужно это, потому что я хочу использовать программу на планшете Windows, и она слишком мала для работы пальца. Есть ли возможность сделать это?Как изменить размер прокрутки 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); 

Вот мой код.

+0

Опубликовать свой код ... – Benjamin

+1

Боковое примечание: это не JavaScript, а Java безопасен по типу. Вы можете просто вызвать 'toString()' на свой 'getItem()' вместо создания строки на лету. Каждый раз, когда вы объединяете строки, вы заполняете пул строк. –

+0

Хм, может быть, JavaFX будет лучшим способом работы с планшетом Windows? Потому что в JavaFX вы можете использовать CSS для стилизации элементов: http://stackoverflow.com/questions/21379865/how-to-hide-the-down-arrow-button-on-a-combobox-in-javafx ... похоже, если combobox слишком мал, могут возникнуть другие проблемы, которые JavaFX может решить легче? – hamena314

ответ

4

Вы можете использовать UIManger контролировать ширину полосы прокрутки:

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

выполняемыми бы, код ДО того, как вы создадите поле со списком.

+0

wow, что намного лучше ^^ - мне очень жаль, теперь я должен убить тебя^_^ничего личного =) (+1) –

+0

Интересно, но разве это не изменит ширину любой полосы прокрутки в программе? Или вы можете изменить это до создания comboboxes и вернуть предыдущее значение после создания comboboxes, чтобы сохранить ширину полосы прокрутки по умолчанию? –

+0

Отлично, спасибо большое! –

3

это не так просто, но есть решение, вы должны создать подкласс JComboBox ...

Вы должны создать подкласс JComboBox, чтобы получить доступ к ComboBoxUI. Для этого вы установите свой собственный ComboBoxUI во время объекта при создании экземпляра (мы делаем изменения в всех конструкторах см init() в CustomComboBox.

ComboBoxUI требуется, чтобы получить доступ к ComboboxPopup. Заменим просто по умолчанию ComboboxPopup с нашим обычаем ComboboxPopup. вы должны знать, что ComboboxPopup отвечает за создание-понижающей раскрывающемся меню, которое появляется при нажатии на кнопку.

тогда мы, наконец, можно настроить JScrollPane из всплывающего окна, мы захватить вертикальный JScrollBar и изменить его внешний вид (настройка пользовательской ширины).

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

} 

это обычай ComboboxUI, который предоставляет вам Acces к ComboboxPopup (довольно простой):

public class CustomComboBoxUI extends BasicComboBoxUI{ 

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

} 

thankgod обычай ComboboxPopup потребности только основной конструктор перекрываться и только один способ изменить (устанавливает размер scrollpan к 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)); 
    }  

} 

установить размер выпадающего списка просто нужно настроить его размер

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

смотри также setting size of scroller и setting size of combobox для дальнейшей помощи ...

+0

похоже, что я забыл много аннотации '@ Override', я уверен, что вы можете добавить их на себя ^^ –

Смежные вопросы