TITLE:JComboBoxのArrowButtonを隠す

Posted by at 2008-12-22

JComboBoxのArrowButtonを隠す

`ArrowButtonを隠して、JComboBoxの表示をJLabel`風にします。

  • &jnlp;
  • &jar;
  • &zip;
HideComboArrowButton.png

サンプルコード

JPanel p = new JPanel(new BorderLayout(5, 5));
Object[] items = {"JComboBox 11111:", "JComboBox 222:", "JComboBox 33:"};

UIManager.put("ComboBox.squareButton", Boolean.FALSE);
JComboBox comboBox = new JComboBox(items);
comboBox.setUI(new BasicComboBoxUI() {
  @Override protected JButton createArrowButton() {
    JButton button = new JButton(); //super.createArrowButton();
    button.setBorder(BorderFactory.createEmptyBorder());
    button.setVisible(false);
    return button;
  }
});
comboBox.setOpaque(true);
comboBox.setBackground(p.getBackground());
comboBox.setBorder(BorderFactory.createEmptyBorder(0,2,0,2));
comboBox.setFocusable(false);

UIManager.put("ComboBox.squareButton", Boolean.TRUE);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、以下のようにして、`JComboBoxJLabel`風に表示しています。

  • `UIManager.put("ComboBox.squareButton", Boolean.FALSE);で、ArrowButton`の幅をそのまま使用するように変更
  • `BasicComboBoxUI#createArrowButtonをオーバーライドして、ArrowButtonの代わりに幅高さ0setVisible(false)`なボタンを作成
  • `JComboBoxの背景色を親のJPanel`と同じにする
  • `JComboBox`がフォーカスを取得しないようにする

参考リンク

コメント