TITLE:JComboBoxのPopupMenuを右側に表示する
#navi(../)
RIGHT:Posted by [[terai]] at 2010-03-22
*JComboBoxのPopupMenuを右側に表示する [#ma908247]
JComboBoxの右側にPopupMenuが表示されるように設定します。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#y31611e4]
#code{{
class RightPopupMenuListener implements PopupMenuListener {
  public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    JComboBox combo = (JComboBox)e.getSource();
    Accessible a = combo.getUI().getAccessibleChild(combo, 0);
    if (a instanceof BasicComboPopup) {
      BasicComboPopup pop = (BasicComboPopup)a;
      Point p = new Point(combo.getSize().width, 0);
      SwingUtilities.convertPointToScreen(p, combo);
      pop.setLocation(p);
    }
  }
  public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
  public void popupMenuCanceled(PopupMenuEvent e) {}
}
}}

**解説 [#f8654556]
上記のサンプルでは、JComboBoxのPopupMenuが開くときに、その位置を変更するようなPopupMenuListenerを作成し、addPopupMenuListenerメソッドで追加しています。

----
JComboBoxの矢印アイコンも、以下のようにして変更しています。
#code{{
combo2.setUI(new com.sun.java.swing.plaf.windows.WindowsComboBoxUI() {
  protected JButton createArrowButton() {
    JButton button = new JButton(icon) {
      public Dimension getPreferredSize() {
        return new Dimension(14, 14);
      }
    };
    button.setRolloverIcon(makeRolloverIcon(icon));
    button.setFocusPainted(false);
    button.setContentAreaFilled(false);
    return button;
  }
});
}}

//**参考リンク
**コメント [#s2b13935]
#comment