2015-07-23 3 views
0

Я работаю над небольшим применением. Я создал JComboBox, и я хочу изменить цвета внутри. Я уже изменил цвет фона, переднего плана, стрелкиButton, ... Но я не знаю, как изменить цвета для scrollBar внутри.Java: JComboBox -> ScrollBar - изменить цвет

comoBox = new JComboBox();  
comoBox.setName("currencyCombo"); 

DefaultComboBoxModel comboModel = new DefaultComboBoxModel(); 
comboModel.addElement("gagD"); 
comboModel.addElement("agg"); 
comboModel.addElement("EhgsY"); 
comboModel.addElement("CgafgY"); 
comboModel.addElement("CfadgY"); 
comboModel.addElement("Ggafg"); 
comboModel.addElement("Sgfsdg"); 
comboModel.addElement("Ugfasdg"); 
comboModel.addElement("fasfasf"); 
comoBox.setModel(comboModel); 
comoBox.setOpaque(true); 

UIManager.put("ComboBox.disabledBackground", new java.awt.Color(32, 34, 41)); 
UIManager.put("ComboBox.disabledForeground", new java.awt.Color(181, 181, 181)); 
UIManager.put("ComboBox.background", new java.awt.Color(32, 34, 41)); 
UIManager.put("ComboBox.foreground", new java.awt.Color(181, 181, 181)); 
UIManager.put("ComboBox.selectionBackground", new java.awt.Color(181, 181, 181)); 
UIManager.put("ComboBox.selectionForeground", new java.awt.Color(32, 34, 41)); 

    comoBox.setUI(new BasicComboBoxUI(){ 
    @Override 
    protected JButton createArrowButton() { 
     JButton arrowButton = new BasicArrowButton( 
     BasicArrowButton.SOUTH, 
     new java.awt.Color(32, 34, 41), 
     new java.awt.Color(181, 181, 181), 
     new java.awt.Color(181, 181, 181), 
     new java.awt.Color(32, 34, 41)); 
     arrowButton.setBorder(BorderFactory.createLineBorder(new java.awt.Color(32, 34, 41))); 
     return arrowButton; 
    }    
}); 

Я попытался это:

Object obejct = currencyCombo.getUI().getAccessibleChild(currencyCombo, 0); 
       Component co = ((Container) obejct).getComponent(0) ; 
         if(co instanceof JScrollPane){ 
          JScrollPane pane = (JScrollPane) co;   
          Component[] components = pane.getComponents(); 
          for (Component component : components) { 
           if(component instanceof JScrollBar) 
           { 
            JScrollBar jsb = (JScrollBar) component; 
            jsb.setBackground(Color.red); 
            jsb.setForeground(Color.blue); 
            jsb.setUI(new BasicScrollBarUI()); 
            jsb.updateUI(); 
           } 

          } 

         } 
+1

Что такое ** progressBar внутри **? – StanislavL

+0

Я сомневаюсь, что есть специальный ключ для полосы прокрутки внутри combobox, более вероятно, что это будут те же ключи, что и любая другая полоса прокрутки. – Holger

+0

@Holger Я знаю, как изменить фон для классического scrollBar (я думаю, когда я создаю новый компонент JScrollBar, я могу изменить цвет), но я не знаю, как я могу получить scrollBar в comboBox. Я пробовал это, но это не работает. – jakub

ответ

0

Хей Якуб, следующий код будет изменить фон ScrollBar внутри ComboBox:

EDIT: Вы можете получить доступ к цвету Полоса прокрутки следующим образом:

UIManager.put("ScrollBar.thumbHighlight", Color...;   
UIManager.put("ScrollBar.thumbDarkShadow", Color...; 
UIManager.put("ScrollBar.highlight", Color...; 
UIManager.put("ScrollBar.trackHighlight", Color...; 
+0

Я редактирую его @ Хольгер, надеюсь, он выглядит намного лучше – juanmajmjr

+0

Итак, теперь не вопрос, тем не менее, ясно, что вы никогда не пробовали его самостоятельно, так как это просто не работает. – Holger

+0

спасибо, но я не знаю, как я могу с этим изменением цвета scrollBar. Может быть, если есть какая-то функция, которую я могу переопределить, как я делаю это со стрелкой. – jakub