2016-07-01 4 views
1

Мне не понравилась стандартная кнопка со стрелкой JComboBox, потому что она не очень хорошо вписывалась в мой графический интерфейс. Поэтому я изменил его. Для этого я написал класс, который распространяется BasicComboUI. В обычном случае все так, как я ожидаю. Но как только я выключаю кнопку, она остается такой, какой она есть, а это означает, что кнопка больше не получает серый цвет фона. Вместо этого выполняется левая часть списка. Поэтому я хотел бы знать, есть ли способ определить или изменить поведение отключения кнопки со стрелкой.Определение/настройка цвета JComboBox BasicArrowButton в случае отключения

Вот мой текущий код:

public class CustomArrowUI extends BasicComboBoxUI{ 

private static Color buttonBackground; 
private static Color borderBox; 
private static Color arrowColor; 
private static Color buttonBorder; 



public static ComboBoxUI createUI(JComponent c, Color buttonBackground, Color borderBox, Color arrowColor, Color buttonBorder) 
{ 
    CustomArrowUI.buttonBackground = buttonBackground; 
    CustomArrowUI.borderBox = borderBox; 
    CustomArrowUI.arrowColor = arrowColor; 
    CustomArrowUI.buttonBorder = buttonBorder; 

    return new CustomArrowUI(); 
} 


@Override 
protected JButton createArrowButton() 
{ 
    JButton button = new BasicArrowButton(BasicArrowButton.SOUTH, buttonBackground, borderBox, arrowColor, buttonBorder); 
    LineBorder border = new LineBorder(buttonBorder, 1); 
    button.setEnabled(false); 
    button.setBorder(border); 
    return button; 

}} 

Что я мог сделать, это установка фона светло-серого цвета по умолчанию, а также изменить цвет в ActionListener предыдущей кнопки, которая позволяя мою JComboBox. Но мне это не нравится. Я бы предпочел сделать это прямо в моем CustomArrowUI

ответ

0

Я нашел один короткий путь, чтобы решить эту проблему. Я добавил ChangeListener к моей кнопки со стрелкой, которая является проверка, если кнопка включена или нет, и окраска кнопки:

@Override 
protected JButton createArrowButton() 
{ 
    final JButton button = new BasicArrowButton(BasicArrowButton.SOUTH, buttonBackground, borderBox, arrowColor, buttonBorder); 
    LineBorder border = new LineBorder(buttonBorder, 1); 
    button.setEnabled(false); 
    button.setBorder(border); 
    button.addChangeListener(new ChangeListener(){ 

     @Override 
     public void stateChanged(ChangeEvent arg0) { 
      if(button.isEnabled()) 
       button.setBackground(Color.WHITE); 
      else 
      { 
       button.setBackground(ColorPalette.LIGHT_GREY); 
       button.setBorder(new LineBorder(ColorPalette.LIGHT_GREY, 1)); 
      } 
     } 
    }); 
    return button; 
} 

Выше я изменил фон кнопки и цвет границы тоже сделать это выглядеть стрелка является частью JComboBox, а не как отдельная кнопка внутри нее.

Поскольку отключение-поведение наследуется от самого JComboBox (я думаю), мне не нужно заботиться о том, можно ли использовать эту кнопку или нет. Все, что мне нужно определить, это цвет. Еще один важный момент - удостовериться, что вызов метода setEnabled() после настройки пользовательского интерфейса JComboBox, если JComboBox должен быть отключен по умолчанию. В противном случае он не будет реагировать изначально, и кнопка со стрелкой будет отображаться.