JColorChooserのRGB色選択JRadioButtonにMnemonicを設定する
Total: 499
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
JColorChooser
のRGB
色選択パネル内に配置されたRGB
選択用JRadioButton
のテキストに表示されたMnemonic
を有効化します。
Screenshot
Advertisement
サンプルコード
JColorChooser cc = new JColorChooser();
cc.setColor(label.getBackground());
AbstractColorChooserPanel rgbChooser = getRgbChooser(cc);
if (rgbChooser != null) {
AbstractColorChooserPanel[] panels = cc.getChooserPanels();
List<AbstractColorChooserPanel> choosers = new ArrayList<>(Arrays.asList(panels));
List<String> rgbKey = Arrays.asList("rgbRed", "rgbGreen", "rgbBlue");
String fmt = "ColorChooser.%sText";
List<String> rgbList = Arrays.asList(
UIManager.getString(String.format(fmt, rgbKey.get(0)), rgbChooser.getLocale()),
UIManager.getString(String.format(fmt, rgbKey.get(1)), rgbChooser.getLocale()),
UIManager.getString(String.format(fmt, rgbKey.get(2)), rgbChooser.getLocale()));
SwingUtils.descendants(rgbChooser)
.filter(JRadioButton.class::isInstance)
.map(JRadioButton.class::cast)
.forEach(r -> {
String txt = r.getText();
int idx = rgbList.indexOf(txt);
if (idx >= 0) {
String key = String.format("ColorChooser.%sMnemonic", rgbKey.get(idx));
int mnemonic = getInteger(rgbChooser, key);
if (mnemonic > 0) {
r.setMnemonic(Character.toChars(mnemonic)[0]);
mnemonic = getInteger(this, key + "Index");
if (mnemonic >= 0) {
r.setDisplayedMnemonicIndex(mnemonic);
}
}
}
});
cc.setChooserPanels(choosers.toArray(new AbstractColorChooserPanel[0]));
}
View in GitHub: Java, Kotlin解説
Default
MetalLookAndFeel
などで使用可能なRGB
色選択パネルのRGB
選択用JRadioButton
テキストにはそれぞれ赤(D)
、緑(N)
、青(B)
とMnemonic
が表示されているが、Alt+Bなどをキー入力しても効果がない- [JDK-4917411] RGB dialog of JColorChooser missing mnemonics for Red and Blue colors in French - Java Bug Systemのようなバグレポートが存在するので少なくとも
Java 1.4
ではこれらのMnemonic
が有効だったようだが、いつから無効になったのかは不明 HSV
色選択パネルの色相・彩度・値選択用JRadioButton
やCMYK
色選択パネルのシアン・マゼンタ・黄選択用JRadioButton
のようにMnemonic
なしに揃える場合は、以下のように赤・緑・青選択用JRadioButton
のテキストを変更する必要があるUIManager.put("ColorChooser.rgbRedText", "Red"); UIManager.put("ColorChooser.rgbGreenText", "Green"); UIManager.put("ColorChooser.rgbBlueText", "Blue");
Mnemonic
RGB
色選択パネルの子孫コンポーネントを検索してJRadioButton
を取得- 取得した
JRadioButton
のタイトルが、たとえばUIManager.get("ColorChooser.rgbRedText")
と一致する場合はUIManager.get("ColorChooser.rgbRedMnemonic")
でMnemonic
を取得して設定- 赤選択用
JRadioButton
のテキストとMnemonic
はjava.desktop/com/sun/swing/internal/plaf/basic/resources/basic.java
で{ "ColorChooser.rgbRed.textAndMnemonic", "Re&d" },
のような形式でまとめて定義されている
- 赤選択用
参考リンク
- JColorChooserのRGB色選択パネル内に表示される16進数カラーコードにAlpha値を追加する
RGB
色選択パネルの取得方法は上記と同様
- [JDK-4917411] RGB dialog of JColorChooser missing mnemonics for Red and Blue colors in French - Java Bug System