概要

JColorChooserから指定したColorChooserPanelのタブなどを削除してJDialogに設定します。

サンプルコード

JCheckBox swatches = new JCheckBox(UIManager.getString("ColorChooser.swatchesNameText", getLocale()));
JCheckBox hsv = new JCheckBox(UIManager.getString("ColorChooser.hsvNameText", getLocale()));
JCheckBox hsl = new JCheckBox(UIManager.getString("ColorChooser.hslNameText", getLocale()));
JCheckBox rgb = new JCheckBox(UIManager.getString("ColorChooser.rgbNameText", getLocale()));
JCheckBox cmyk = new JCheckBox(UIManager.getString("ColorChooser.cmykNameText", getLocale()));
List<JCheckBox> list = Arrays.asList(swatches, hsv, hsl, rgb, cmyk);

JButton button = new JButton("open JColorChooser");
button.addActionListener(e -> {
  List<String> selected = list.stream()
    .filter(AbstractButton::isSelected).map(AbstractButton::getText).collect(Collectors.toList());
  if (selected.isEmpty()) { // use default JColorChooser
    JColorChooser.showDialog(getRootPane(), "JColorChooser", null);
  } else {
    JColorChooser cc = new JColorChooser();
    for (AbstractColorChooserPanel p : cc.getChooserPanels()) {
      if (!selected.contains(p.getDisplayName())) {
        cc.removeChooserPanel(p);
      }
    }
    dialog.getContentPane().removeAll();
    dialog.getContentPane().add(cc);
    dialog.getContentPane().add(buttonPanel, BorderLayout.SOUTH);
    dialog.pack();
    dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(getRootPane()));
    dialog.setVisible(true);
  }
});
View in GitHub: Java, Kotlin

解説

  • すべてのチェックボックスが未選択の場合:
    • JColorChooser.showDialog(...)でデフォルトのカラー・チューザを表示
      • staticなメソッドなので、JColorChooser#removeChooserPanel(...)などでColorChooserPanelを削除しても反映されない
  • サンプル(S): swatches
    • パレット(swatches)から色を選択可能
  • HSV(H): hsv
    • 色相-彩度-値のカラーモデルを使用して色を選択可能
    • JDK 1.7.0以前は「色相-彩度-明るさ」でHSBと表示されていた
  • HSL(L): hsl
    • 「色相-彩度-明度」のカラーモデルを使用して色を選択可能
    • JDK 1.7.0での新機能
  • RGB(G): rgb
    • 「赤-緑-青」のカラーモデルを使用して色を選択可能
    • RはリセットボタンのMnemonicで使用されているので、RGBタブのMnemonicGになっている
  • CMYK
    • プロセスカラー、または4色モデル(シアン-マゼンタ-黄-黒)を使用して色を選択可能
    • JDK 1.7.0での新機能

  • JColorChooserのタブなどに表示されるAbstractColorChooserPanel#getDisplayName()の値はLocaleに依存する
  • 上記のサンプルの「すべて未選択」以外で表示されるJDialogOKボタンなどはクリックしても無効 JColorChooser.createDialog(...)メソッドを使用するよう修正

参考リンク

コメント