Swing/CheckBoxColor のバックアップの現在との差分(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/CheckBoxColor へ行く。
- 1 (2007-04-09 (月) 15:16:42)
- 2 (2007-04-09 (月) 18:21:10)
- 3 (2007-10-25 (木) 13:45:16)
- 4 (2007-12-21 (金) 18:42:18)
- 5 (2008-03-12 (水) 19:36:13)
- 6 (2008-04-10 (木) 15:38:25)
- 7 (2011-03-27 (日) 02:53:23)
- 8 (2014-11-09 (日) 02:46:09)
- 9 (2015-02-22 (日) 21:02:07)
- 10 (2016-01-09 (土) 01:47:08)
- 11 (2016-05-26 (木) 14:04:47)
- 12 (2017-08-15 (火) 13:47:47)
- 13 (2017-11-02 (木) 15:30:24)
- 14 (2019-06-05 (水) 20:33:24)
- 15 (2021-02-23 (火) 18:06:50)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: CheckBoxColor title: JCheckBoxのチェックアイコンを変更 tags: [JCheckBox, Icon, UIManager] author: aterai pubdate: 2007-04-09T15:16:42+09:00 description: JCheckBoxで使用するチェックアイコンの色や形を変更します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTI225hC_I/AAAAAAAAATc/YxhkQ5Bq2sk/s800/CheckBoxColor.png --- * 概要 [#j820b62f] * 概要 [#summary] `JCheckBox`で使用するチェックアイコンの色や形を変更します。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTI225hC_I/AAAAAAAAATc/YxhkQ5Bq2sk/s800/CheckBoxColor.png) * サンプルコード [#ue47b08d] * サンプルコード [#sourcecode] #code(link){{ JCheckBox cb2 = new JCheckBox("check2"); cb2.setIcon(new MyCheckBoxIcon2()); }} #code{{ class MyCheckBoxIcon2 implements Icon { class CheckBoxIcon2 implements Icon { private final Icon orgIcon = UIManager.getIcon("CheckBox.icon"); @Override public void paintIcon(Component c, Graphics g, int x, int y) { orgIcon.paintIcon(c, g, x, y); AbstractButton b = (AbstractButton)c; ButtonModel model = b.getModel(); g.setColor(new Color(255, 155, 155, 100)); g.fillRect(x+2,y+2,getIconWidth()-4,getIconHeight()-4); if(model.isSelected()) { g.setColor(Color.RED); g.drawLine(x+9, y+3, x+9, y+3); g.drawLine(x+8, y+4, x+9, y+4); g.drawLine(x+7, y+5, x+9, y+5); g.drawLine(x+6, y+6, x+8, y+6); g.drawLine(x+3, y+7, x+7, y+7); g.drawLine(x+4, y+8, x+6, y+8); g.drawLine(x+5, y+9, x+5, y+9); g.drawLine(x+3, y+5, x+3, y+5); g.drawLine(x+3, y+6, x+4, y+6); Graphics2D g2 = (Graphics2D) g.create(); g2.translate(x, y); orgIcon.paintIcon(c, g2, 0, 0); if (c instanceof AbstractButton) { AbstractButton b = (AbstractButton) c; ButtonModel model = b.getModel(); g2.setColor(new Color(255, 155, 155, 100)); g2.fillRect(2, 2, getIconWidth() - 4, getIconHeight() - 4); if (model.isSelected()) { g2.setColor(Color.RED); g2.drawLine(9, 3, 9, 3); g2.drawLine(8, 4, 9, 4); g2.drawLine(7, 5, 9, 5); g2.drawLine(6, 6, 8, 6); g2.drawLine(3, 7, 7, 7); g2.drawLine(4, 8, 6, 8); g2.drawLine(5, 9, 5, 9); g2.drawLine(3, 5, 3, 5); g2.drawLine(3, 6, 4, 6); } } g2.dispose(); } @Override public int getIconWidth() { return orgIcon.getIconWidth(); } @Override public int getIconHeight() { return orgIcon.getIconHeight(); } } }} * 解説 [#gba9d4b3] - `org` -- 通常の`JCheckBox`です。 - `check1` -- `com/sun/java/swing/plaf/windows/WindowsIconFactory.java`から、`XP`スタイルではない場合のアイコンをコピーし、一部色などを変更しています。 - `check2` -- `UIManager.getIcon("CheckBox.icon")`で取得したオリジナルのアイコンを、アルファ値を設定した色で上書きし、チェック(レ)も色を変えて塗り潰しています。ただしチェックの形は`WindowsIconFactory`からコピーしているので、別の`LookAndFeel`では枠からはみ出してしまいます。 - `check3` -- `javax.swing.plaf.metal.MetalCheckBoxIcon`をアルファ値を設定した色で上書きしています。 * 解説 [#explanation] - `Default` -- デフォルトの`JCheckBox` - `WindowsIconFactory` -- `com/sun/java/swing/plaf/windows/WindowsIconFactory.java`から`XP`スタイルではない場合のアイコンをコピーし、一部色などを変更 - `CheckBox.icon+RED` -- `UIManager.getIcon("CheckBox.icon")`で取得したオリジナルのアイコンをアルファ値を設定した色で上書きし、✔マークも色を変えて塗り潰し -- チェックの形は`WindowsIconFactory`からコピーしているので`WindowsLookAndFeel`以外では枠からはみ出してしまう - `MetalCheckBoxIcon+GRAY` -- `javax.swing.plaf.metal.MetalCheckBoxIcon`をアルファ値を設定した色で上書き `check1`~`check3`で生成したアイコンを、それぞれ`JCheckBox#setIcon`で設定しています。 ---- - `Windows XP`スタイル以外を使用する環境で色を変更する場合は以下のような方法もある `XP`スタイルで無い場合(`Windows`環境以外ではテストしていない)、色を変更するだけなら、以下のようにする方法もあります。 #code{{ System.setProperty("swing.noxp", "true"); UIManager.put("CheckBox.interiorBackground", new ColorUIResource(Color.GREEN)); UIManager.put("CheckBox.darkShadow", new ColorUIResource(Color.RED)); JCheckBox cb = new JCheckBox("check box"); }} * 参考リンク [#qf2b955f] - [http://www.ibm.com/developerworks/jp/java/library/j-synth/ 進歩したSynth] -- `SynthLookAndFeel`を使って、画像でチェックを描画するサンプルなどが紹介されています。 * 参考リンク [#reference] - [https://www.ibm.com/developerworks/jp/java/library/j-synth/ 進歩したSynth] -- `SynthLookAndFeel`を使って、画像でチェックを描画するサンプルなどが紹介されている * コメント [#of8fbb29] * コメント [#comment] #comment #comment