2016-07-01 2 views
1

JComboBoxの標準の矢印ボタンが私のGUIにうまく収まらなかったので、私はそれを好まなかった。だから私はそれを変更しました。これを行うには、私は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; 

}} 

デフォルトとして背景光のグレーを設定し、そして私のJComboBoxのを可能にされる前のボタン、ののActionListenerに色を変更しています。しかし、私はちょっとこの解決策が嫌いです。私は直接私の中でそれを行うことを好むでしょうCustomArrowUI

答えて

0

私はこれを解決する簡単な方法を見つけました。私は、ボタンの背景を変更し、境界線の色があまりにもそれは同じように見えるように上

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

:私は、ボタンが有効になっているかどうかをチェックするかどうか、およびボタンを着色された私の矢印ボタンにChangeListenerを追加しました矢印はJComboBoxの一部であり、内部の別のボタンとは異なります。

disabling-behaviourはJComboBox自体から継承しているので、ボタンが使用可能かどうかは気にする必要はありません。定義する必要があるのは色だけです。 JComboBoxのUIを設定した後にsetEnabled()メソッドを呼び出す場合は、JComboBoxをデフォルトで無効にする必要がある場合は、別の重要な点を確認してください。それ以外の場合は、最初は反応せず、矢印ボタンが有効になります。

関連する問題