概要

JComboBoxのドロップダウンリストのレイアウトに変更してリストアイテムを2段で表示する

サンプルコード

ComboBoxModel<String> model = makeModel();
int rowCount = (model.getSize() + 1) / 2;
JComboBox<String> combo = new JComboBox<String>(model) {
  @Override public Dimension getPreferredSize() {
    Insets i = getInsets();
    Dimension d = super.getPreferredSize();
    int w = Math.max(100, d.width);
    int h = d.height;
    int buttonWidth = 20; // ???
    return new Dimension(
        buttonWidth + w + i.left + i.right, h + i.top + i.bottom);
  }

  @Override public void updateUI() {
    super.updateUI();
    setMaximumRowCount(rowCount);
    setPrototypeDisplayValue("12345");
    Accessible o = getAccessibleContext().getAccessibleChild(0);
    if (o instanceof ComboPopup) {
      JList<?> list = ((ComboPopup) o).getList();
      list.setLayoutOrientation(JList.VERTICAL_WRAP);
      list.setVisibleRowCount(rowCount);
      Border b0 = list.getBorder();
      Border b1 = new ColumnRulesBorder();
      list.setBorder(BorderFactory.createCompoundBorder(b0, b1));
      list.setFixedCellWidth((getPreferredSize().width - 2) / 2);
    }
  }
};
View in GitHub: Java, Kotlin

解説

参考リンク

コメント