Swing/RgbRadioButtonMnemonic のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RgbRadioButtonMnemonic へ行く。
- 1 (2023-11-27 (月) 03:56:00)
- category: swing folder: RgbRadioButtonMnemonic title: JColorChooserのRGB色選択JRadioButtonにMnemonicを設定する tags: [JColorChooser, JRadioButton, UIManager] author: aterai pubdate: 2023-11-27T03:52:23+09:00 description: JColorChooserのRGB色選択パネル内に配置されたRGB選択用JRadioButtonのテキストに表示されたMnemonicを有効化します。 image: https://drive.google.com/uc?id=1PCMoVMxkXTzrdR85EBmOo36H_oe08ryp
概要
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
では有効だったようだが、いつから無効になったのかは不明 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