Swing/PrototypeDisplayValue のバックアップ(No.10)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/PrototypeDisplayValue へ行く。
- category: swing folder: PrototypeDisplayValue title: JComboBoxのセルサイズを決定するためのプロトタイプ値を設定する tags: [JComboBox, ListCellRenderer] author: aterai pubdate: 2015-05-18T00:01:40+09:00 description: JComboBoxがそのセルサイズを決定するために使用するプロトタイプ値を設定します。 image:
概要
JComboBox
がそのセルサイズを決定するために使用するプロトタイプ値を設定します。
Screenshot
Advertisement
サンプルコード
combo3.setPrototypeDisplayValue(TITLE);
// ...
combo5.setRenderer(new SiteListCellRenderer<Site>());
combo5.setPrototypeDisplayValue(new Site(TITLE, new DummyIcon(Color.GRAY)));
View in GitHub: Java, Kotlin解説
- デフォルト
- モデルの中からサイズが最大となる要素を検索して
JComboBox
の推奨サイズを決定する - 上記のサンプルではモデルが空なのでボタンの幅と余白が
JComboBox
の推奨サイズになっている
- モデルの中からサイズが最大となる要素を検索して
JComboBox#setPrototypeDisplayValue(...)
で指定した要素からJComboBox
の推奨サイズを決定する- 編集可能な場合の
JComboBox
にJComboBox#setPrototypeDisplayValue(...)
を設定 - 独自の要素
E
を使用するJComboBox<E>
にその要素を表示するためのListCellRenderer<E>
を設定 - 上記の
JComboBox<E>
にJComboBox#setPrototypeDisplayValue(E)
でプロトタイプ値を設定 - 上記の
JComboBox<E>
でモデルを空にしてListCellRenderer
で値がnull
になる場合、JComboBox#setPrototypeDisplayValue(E)
で設定した値が表示されてしまうclass SiteListCellRenderer<E extends Site> extends JLabel implements ListCellRenderer<E> { @Override public Component getListCellRendererComponent( JList<? extends E> list, E value, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(index >= 0); if (Objects.nonNull(value)) { setText(value.title); setIcon(value.favicon); } else { //JComboBox#setPrototypeDisplayValue(E)で設定した値が表示されないようにクリア setText(""); setIcon(null); } // ...
参考リンク
- JComboBox#setPrototypeDisplayValue(E) (Java Platform SE 8)
- JList#setPrototypeCellValue(E) (Java Platform SE 8)
- JListがJScrollPane内に組み込まれている場合のビューポートサイズを設定する
- JComboBoxなどの幅をカラム数で指定