差分情報適用後の実行イメージ

差分情報

パッチファイル (Unified diffs)

--- ColorPanel.java	Mon Jun 01 05:12:13 2009
+++ ColorPanel.java	Fri Jun 12 08:12:15 2009
@@ -6,6 +6,8 @@
 
 // パッケージのインポート
 import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
 import java.awt.Point;
 import java.awt.Color;
 import javax.swing.JPanel;
@@ -15,8 +17,11 @@
 import javax.swing.event.ChangeListener;
 import javax.swing.JScrollPane;
 import javax.swing.JColorChooser;
+import javax.swing.JSlider;
+import javax.swing.JSpinner;
 import javax.swing.JViewport;
 import javax.swing.ScrollPaneConstants;
+import javax.swing.SpinnerNumberModel;
 
 // JPanelを継承する
 public class ColorPanel extends JPanel {
@@ -32,6 +37,27 @@
 
 	private JColorChooser jColorChooser = null;
 
+	// カラーコード連関
+	private JPanel jPanelColorCode = null;
+
+	private JPanel jPanelG = null; // 赤色表示パネル
+
+	private JPanel jPanelR = null;
+
+	private JPanel jPanelB = null;
+
+	private JSlider jSliderR = null; // 赤色スライダ
+
+	private JSlider jSliderG = null;
+
+	private JSlider jSliderB = null;
+
+	private JSpinner jSpinnerR = null; // 赤色スピンボックス
+
+	private JSpinner jSpinnerG = null;
+
+	private JSpinner jSpinnerB = null;
+
 	// --------------------------------------------------
 	// コンストラクタ
 	// --------------------------------------------------
@@ -39,9 +65,9 @@
 		// 部品の配置
 		this.add(getJPanelSelectedColor());
 		this.add(getJScrollPaneColorChooser());
+		this.add(getJPanelColorCode());
 		// 選択色の初期化
-		jPanelSelectedColor.setBackground(clr);
-		jColorChooser.setColor(clr);
+		updateSelectedColor(clr);
 	}
 
 	// --------------------------------------------------
@@ -50,7 +76,8 @@
 	public void setColor(Color clr) {
 		// 色を設定する
 		jPanelSelectedColor.setBackground(clr);
-		jColorChooser.setColor(clr);
+		// 選択色の更新
+		updateSelectedColor(clr);
 	}
 
 	// --------------------------------------------------
@@ -61,6 +88,41 @@
 		return jPanelSelectedColor.getBackground();
 	}
 
+	// --------------------------------------------------
+	// 選択色の更新
+	// --------------------------------------------------
+	private void updateSelectedColor(Color clr) {
+
+		// 新しく作られた色(clr)と、各種色コンポーネントで選択されている色を比較し、異なれば新しい色に更新する
+
+		// 選択色表示パネル(色の比較はRGB値で行う)
+		if (clr.getRGB() != jPanelSelectedColor.getBackground().getRGB()) {
+			jPanelSelectedColor.setBackground(clr);
+		}
+		// カラーチューザ
+		if (clr.getRGB() != jColorChooser.getColor().getRGB()) {
+			jColorChooser.setColor(clr);
+		}
+		// RGB色表示パネル
+		if (clr.getRGB() != new Color(jPanelR.getBackground().getRed(), jPanelG.getBackground().getGreen(), jPanelB.getBackground().getBlue()).getRGB()) {
+			jPanelR.setBackground(new Color(clr.getRed(), 0, 0));
+			jPanelG.setBackground(new Color(0, clr.getGreen(), 0));
+			jPanelB.setBackground(new Color(0, 0, clr.getBlue()));
+		}
+		// RGB色スライダ
+		if (clr.getRGB() != new Color(jSliderR.getValue(), jSliderG.getValue(), jSliderB.getValue()).getRGB()) {
+			jSliderR.setValue(clr.getRed());
+			jSliderG.setValue(clr.getGreen());
+			jSliderB.setValue(clr.getBlue());
+		}
+		// RGB色スピンボックス
+		if (clr.getRGB() != new Color(Integer.parseInt(jSpinnerR.getValue().toString()), Integer.parseInt(jSpinnerG.getValue().toString()), Integer.parseInt(jSpinnerB.getValue().toString())).getRGB()) {
+			jSpinnerR.setValue(Integer.valueOf(clr.getRed()));
+			jSpinnerG.setValue(Integer.valueOf(clr.getGreen()));
+			jSpinnerB.setValue(Integer.valueOf(clr.getBlue()));
+		}
+	}
+
 	// ----------------------------------------------------------------------------------------------------
 	// 以降、ボタンやパネルなどのコンポーネント関連の初期化
 	// ----------------------------------------------------------------------------------------------------
@@ -93,7 +155,8 @@
 			// 選択色の変更イベント
 			jColorChooser.getSelectionModel().addChangeListener(new ChangeListener() {
 				public void stateChanged(ChangeEvent e) {
-					jPanelSelectedColor.setBackground(jColorChooser.getColor()); // 選択色表示パネルに選択色を表示する
+					// 選択色の更新
+					updateSelectedColor(jColorChooser.getColor());
 				}
 			});
 
@@ -106,4 +169,199 @@
 		}
 		return jScrollPaneColorChooser;
 	}
-}
+
+	// カラーコードパネル
+	private JPanel getJPanelColorCode() {
+		if (jPanelColorCode == null) {
+			// グリッドバッグレイアウトを使用する
+			GridBagConstraints gridBagConstraints00 = new GridBagConstraints();
+			gridBagConstraints00.fill = GridBagConstraints.VERTICAL; // 垂直方向に伸ばす
+			gridBagConstraints00.gridx = 1; // マス目の位置(x方向)
+			gridBagConstraints00.gridy = 0; // マス目の位置(y方向)
+			GridBagConstraints gridBagConstraints01 = new GridBagConstraints();
+			gridBagConstraints01.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints01.gridx = 1;
+			gridBagConstraints01.gridy = 1;
+			GridBagConstraints gridBagConstraints02 = new GridBagConstraints();
+			gridBagConstraints02.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints02.gridx = 1;
+			gridBagConstraints02.gridy = 2;
+			GridBagConstraints gridBagConstraints10 = new GridBagConstraints();
+			gridBagConstraints10.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints10.gridx = 0;
+			gridBagConstraints10.gridy = 0;
+			GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
+			gridBagConstraints11.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints11.gridx = 0;
+			gridBagConstraints11.gridy = 1;
+			GridBagConstraints gridBagConstraints12 = new GridBagConstraints();
+			gridBagConstraints12.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints12.gridx = 0;
+			gridBagConstraints12.gridy = 2;
+			GridBagConstraints gridBagConstraints20 = new GridBagConstraints();
+			gridBagConstraints20.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints20.gridx = 3;
+			gridBagConstraints20.gridy = 0;
+			GridBagConstraints gridBagConstraints21 = new GridBagConstraints();
+			gridBagConstraints21.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints21.gridx = 3;
+			gridBagConstraints21.gridy = 1;
+			GridBagConstraints gridBagConstraints22 = new GridBagConstraints();
+			gridBagConstraints22.fill = GridBagConstraints.VERTICAL;
+			gridBagConstraints22.gridx = 3;
+			gridBagConstraints22.gridy = 2;
+			jPanelColorCode = new JPanel();
+			jPanelColorCode.setLayout(new GridBagLayout());
+			jPanelColorCode.add(getJSliderR(), gridBagConstraints00);
+			jPanelColorCode.add(getJSliderG(), gridBagConstraints01);
+			jPanelColorCode.add(getJSliderB(), gridBagConstraints02);
+			jPanelColorCode.add(getJPanelG(), gridBagConstraints11);
+			jPanelColorCode.add(getJPanelR(), gridBagConstraints10);
+			jPanelColorCode.add(getJPanelB(), gridBagConstraints12);
+			jPanelColorCode.add(getJSpinnerR(), gridBagConstraints20);
+			jPanelColorCode.add(getJSpinnerG(), gridBagConstraints21);
+			jPanelColorCode.add(getJSpinnerB(), gridBagConstraints22);
+		}
+		return jPanelColorCode;
+	}
+
+	// 赤色表示パネル
+	private JPanel getJPanelR() {
+		if (jPanelR == null) {
+			jPanelR = new JPanel();
+			jPanelR.setPreferredSize(new Dimension(10, 10)); // サイズ
+		}
+		return jPanelR;
+	}
+
+	// 緑色表示パネル
+	private JPanel getJPanelG() {
+		if (jPanelG == null) {
+			jPanelG = new JPanel();
+			jPanelG.setPreferredSize(new Dimension(10, 10));
+		}
+		return jPanelG;
+	}
+
+	// 青色表示パネル
+	private JPanel getJPanelB() {
+		if (jPanelB == null) {
+			jPanelB = new JPanel();
+			jPanelB.setPreferredSize(new Dimension(10, 10));
+		}
+		return jPanelB;
+	}
+
+	// 赤色カラースライダ
+	private JSlider getJSliderR() {
+		if (jSliderR == null) {
+			jSliderR = new JSlider();
+			jSliderR.setPreferredSize(new Dimension(128, 30)); // サイズ
+			jSliderR.setMaximum(255); // スライダの最大値(0~255)
+			// 目盛り表示設定
+			jSliderR.setForeground(Color.red);
+			jSliderR.setBackground(Color.white);
+			jSliderR.setMajorTickSpacing(16);
+			jSliderR.setMinorTickSpacing(8);
+			jSliderR.setPaintTicks(true);
+			// 値変更時のイベントリスナ
+			jSliderR.addChangeListener(new javax.swing.event.ChangeListener() {
+				public void stateChanged(javax.swing.event.ChangeEvent e) {
+					// 新しく作られた色を、選択色の更新メソッドに渡し、他の部品の色を更新する
+					Color clr = new Color(jSliderR.getValue(), jSliderG.getValue(), jSliderB.getValue());
+					updateSelectedColor(clr);
+				}
+			});
+		}
+		return jSliderR;
+	}
+
+	// 緑色カラースライダ
+	private JSlider getJSliderG() {
+		if (jSliderG == null) {
+			jSliderG = new JSlider();
+			jSliderG.setPreferredSize(new Dimension(128, 30));
+			jSliderG.setMaximum(255);
+			jSliderG.setForeground(Color.green);
+			jSliderG.setBackground(Color.white);
+			jSliderG.setMajorTickSpacing(16);
+			jSliderG.setMinorTickSpacing(8);
+			jSliderG.setPaintTicks(true);
+			jSliderG.addChangeListener(new javax.swing.event.ChangeListener() {
+				public void stateChanged(javax.swing.event.ChangeEvent e) {
+					Color clr = new Color(jSliderR.getValue(), jSliderG.getValue(), jSliderB.getValue());
+					updateSelectedColor(clr);
+				}
+			});
+		}
+		return jSliderG;
+	}
+
+	// 青色カラースライダ
+	private JSlider getJSliderB() {
+		if (jSliderB == null) {
+			jSliderB = new JSlider();
+			jSliderB.setPreferredSize(new Dimension(128, 30));
+			jSliderB.setForeground(Color.blue);
+			jSliderB.setBackground(Color.white);
+			jSliderB.setMaximum(255);
+			jSliderB.setMajorTickSpacing(16);
+			jSliderB.setMinorTickSpacing(8);
+			jSliderB.setPaintTicks(true);
+			jSliderB.addChangeListener(new javax.swing.event.ChangeListener() {
+				public void stateChanged(javax.swing.event.ChangeEvent e) {
+					Color clr = new Color(jSliderR.getValue(), jSliderG.getValue(), jSliderB.getValue());
+					updateSelectedColor(clr);
+				}
+			});
+		}
+		return jSliderB;
+	}
+
+	// 赤色スピンボックス
+	private JSpinner getJSpinnerR() {
+		if (jSpinnerR == null) {
+			jSpinnerR = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1)); // 値の範囲(0から255まで1刻み)
+			jSpinnerR.setPreferredSize(new Dimension(40, 20)); // サイズ
+			// 値変更時のイベントリスナ
+			jSpinnerR.addChangeListener(new javax.swing.event.ChangeListener() {
+				public void stateChanged(javax.swing.event.ChangeEvent e) {
+					// 新しく作られた色を、選択色の更新メソッドに渡し、他の部品の色を更新する
+					Color clr = new Color(Integer.parseInt(jSpinnerR.getValue().toString()), Integer.parseInt(jSpinnerG.getValue().toString()), Integer.parseInt(jSpinnerB.getValue().toString()));
+					updateSelectedColor(clr);
+				}
+			});
+		}
+		return jSpinnerR;
+	}
+
+	// 緑色スピンボックス
+	private JSpinner getJSpinnerG() {
+		if (jSpinnerG == null) {
+			jSpinnerG = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
+			jSpinnerG.setPreferredSize(new Dimension(40, 20));
+			jSpinnerG.addChangeListener(new javax.swing.event.ChangeListener() {
+				public void stateChanged(javax.swing.event.ChangeEvent e) {
+					Color clr = new Color(Integer.parseInt(jSpinnerR.getValue().toString()), Integer.parseInt(jSpinnerG.getValue().toString()), Integer.parseInt(jSpinnerB.getValue().toString()));
+					updateSelectedColor(clr);
+				}
+			});
+		}
+		return jSpinnerG;
+	}
+
+	// 青色スピンボックス
+	private JSpinner getJSpinnerB() {
+		if (jSpinnerB == null) {
+			jSpinnerB = new JSpinner(new SpinnerNumberModel(0, 0, 255, 1));
+			jSpinnerB.setPreferredSize(new Dimension(40, 20));
+			jSpinnerB.addChangeListener(new javax.swing.event.ChangeListener() {
+				public void stateChanged(javax.swing.event.ChangeEvent e) {
+					Color clr = new Color(Integer.parseInt(jSpinnerR.getValue().toString()), Integer.parseInt(jSpinnerG.getValue().toString()), Integer.parseInt(jSpinnerB.getValue().toString()));
+					updateSelectedColor(clr);
+				}
+			});
+		}
+		return jSpinnerB;
+	}
+}
\ No newline at end of file

変更後のファイル

変更の種類 変更後のファイル 変更前後の比較
修正 /branches/add_rgb_color/ColorPanel.java Side-by-side diffs
リンク先は リポジトリ上のURLです