Swing/RoundedDropDownList の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/RoundedDropDownList へ行く。
- Swing/RoundedDropDownList の差分を削除
--- category: swing folder: RoundedDropDownList title: JComboBoxのドロップダウンリストに角丸のBorderを設定する tags: [JComboBox, BasicComboPopup, JPopupMenu, Border] author: aterai pubdate: 2016-01-11T00:02:17+09:00 description: JComboBoxからBasicComboPopupを取得し、これに角丸のBorderを設定します。 image: https://lh3.googleusercontent.com/-hO6OrwNE6O4/VpJu21j7FbI/AAAAAAAAOLA/mUBgzYUJpes/s800-Ic42/RoundedDropDownList.png --- * 概要 [#summary] `JComboBox`から`BasicComboPopup`を取得し、これに角丸の`Border`を設定します。 #download(https://lh3.googleusercontent.com/-hO6OrwNE6O4/VpJu21j7FbI/AAAAAAAAOLA/mUBgzYUJpes/s800-Ic42/RoundedDropDownList.png) * サンプルコード [#sourcecode] #code(link){{ JComboBox<String> combo1 = new JComboBox<String>(makeModel()) { private transient PopupMenuListener listener; @Override public void updateUI() { removePopupMenuListener(listener); UIManager.put("ComboBox.border", new RoundedCornerBorder()); super.updateUI(); setUI(new BasicComboBoxUI()); listener = new HeavyWeightContainerListener(); addPopupMenuListener(listener); Object o = getAccessibleContext().getAccessibleChild(0); if (o instanceof JComponent) { JComponent c = (JComponent) o; c.setBorder(new RoundedCornerBorder()); c.setForeground(FOREGROUND); c.setBackground(BACKGROUND); } } }; }} * 解説 [#explanation] - 上: -- `UIManager.put(...)`で`JComboBox`の背景色などを変更し、`BasicComboBoxUI`を設定 -- `UIManager.put(...)`で`JComboBox`の背景色などを変更して`BasicComboBoxUI`を設定 - 中: -- 上の`JComboBox`から`getAccessibleContext().getAccessibleChild(0)`で`BasicComboPopup`を取得し角丸の`Border`を設定 -- `JComboBox`に`PopupMenuListener`を追加しドロップダウンリストが`JFrame`の外側にはみ出す(`HeavyWeightContainer`の`JWindow`に`JPopupMenu`が配置されている)場合は、`JWindow`の背景を透明化して角丸部分を非表示に設定 - 下: -- 中の`JComboBox`と同様に`BasicComboPopup`を取得し、下辺のみ角丸の`Border`を設定(`JComboBox`自体には上辺のみ角丸の`Border`を設定) -- 中の`JComboBox`と同様に`BasicComboPopup`を取得して下辺のみ角丸の`Border`を設定 --- `JComboBox`自体には上辺のみ角丸の`Border`を設定 -- `ArrowButton`を変更 * 参考リンク [#reference] - [[JComboBoxの角を丸める>Swing/RoundedComboBox]] - [https://stackoverflow.com/questions/34503780/rounded-corner-for-jcombobox/34534091#34534091 java - Rounded Corner for JComboBox - Stack Overflow] * コメント [#comment] #comment #comment