2016-02-17 11 views
5

私のプログラムにはいくつかのJComboBoxがあります。私は、スクロールバーと矢印ボタンのサイズを、より広い範囲で変更したいと考えています。私は、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はタイプセーフです。文字列を作成するのではなく、 'getItem()'で 'toString()'を呼び出すことができます。文字列を連結するたびに、文字列プールにデータが移入されます。 –

+0

ええと、多分JavaFXはWindowsタブレットで作業するより良い方法でしょうか? JavaFXではCSSを使用して要素のスタイルを設定できるため、http://stackoverflow.com/questions/21379865/how-to-hide-the-down-arrow-button-on-a-combobox-in-javafx ...コンボボックスが小さすぎるようですが、JavaFXが簡単に修正できる他の問題が発生する可能性がありますか? – hamena314

答えて

4

を参照してください。

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

あなたはそれを実行しますコンボボックスを作成する前にコードを作成してください。

+0

うわー、それはずっと良いです^^ - 本当に残念です、今あなたを殺す必要があります^ _ ^何も個人=)(+1) –

+0

面白いですが、プログラム内のスクロールバーの幅を変更することはありませんか?または、コンボボックスを作成する前にそれを変更し、デフォルトのスクロールバーの幅を保持するためにコンボボックスを作成した後に前の値を戻すことができますか? –

+0

完璧、ありがとう! –

3

あなたはComboBoxUIへのアクセスを得るためにJComboBoxをサブクラス化する必要が...あなたはJComboBoxのをサブクラス化する必要があり、

それはそう簡単ではありませんが、解決策があります。あなたは、我々はすべてのコンストラクタの変化は、CustomComboBoxinit()を参照してください作る(オブジェクトのインスタンス化の際に、独自のカスタムComboBoxUIを設定することができません。

ComboBoxUIComboboxPopupへのアクセスを取得する必要があります。私たちは、カスタムで、単にデフォルト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); 
    } 

} 

これはあなたがComboboxPopup(非常に簡単)にアクセスも許可するカスタムComboboxUI次のとおりです。

public class CustomComboBoxUI extends BasicComboBoxUI{ 

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

} 

thankgodカスタムComboboxPopupニーズだけで、基本的なコンストラクタをオーバーライドし、唯一の方法は、(変更はのサイズを設定します40ピクセルにscrollpan):

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

あなたはスクロールバーの幅を制御するUIMangerを使用することができます...さらに助けにもsetting size of scrollersetting size of combobox

+0

私は多くのことを忘れてしまったようです注釈 '@オーバーライド'私はあなた自身でそれらを追加することができると確信しています^^ –

関連する問題