1. 概要
1.1 ButtonOfColorChooserを使うコマンド
(1) fill color
ボタンの"fill color"メニューアイテムにButtonOfColorChooserが設定されている。
(2) line color
ボタンの"line color"メニューアイテムにButtonOfColorChooserが設定されている。
(3) font color:
fontボタン()
を押すと下図の"font menu"ダイアログが表示される。
ボタンにButtonOfColorChooserが設定されている。
1.2 ButtonOfColorChooseをクリックしたときの処理
(1) ButtonOfColorChooserをクリックする操作は次の3通りである
・fill colorボタンの"fill color"メニューを選んだとき
・line colorボタンの"line color"メニューを選んだとき
・ボタンをクリックしたとき
(2) ButtonOfColorChooserをクリックしたときの処理
ButtonOfColorChooserのアクション処理を行うColorChooserAction
オブジェクトのactionPerformedメソッドが呼び出される。
public void actionPerformed(ActionEvent e) {
this.commandName=e.getActionCommand();
............................
CustomColorChooserDialog dialog=ObjectTable.getCustomColorChooserDialog();
String title="";
if(this.commandName.equals("fill color")) title="
Command: fill color";
if(this.commandName.equals("line color")) title="
Command: line color";
if(this.commandName.equals("font color")) title="
Command: font color";
dialog.commandLabel.setText(title);
dialog.removeColorSelectionListener();
dialog.addColorSelectionListener(this);
dialog.showDialog(this.commandName);
}
[説明]
e.getActionCommand()でコマンド名を取得。"fill color", "line color",
"font color"のいずれかである。
ObjectTableからCustomColorChooserDialogオブジェクトを取得し次の処理を行う。
Step1 CustomColorChooserDialogに表示するタイトル("Command: fill color"など)を指定
図(b)上段の黒い帯(パネル)に表示する文字列。
Step2 ColorSelectionListenerを再設定
CustomColorChooserDialogのOKボタンをクリックしたときに色を受け取る
オブジェクトであるColorChooserActionオブジェクトを設定する。OKボタンをクリックしたときはそのアクション処理を行う
colorSelectedメソッドが呼び出される。
Spep3 showDialogにコマンド名を渡してCustomColorChooserDialogを表示する。
:
CustomColorChooserDialogオブジェクト
ButtonOfColorChooserオブジェクトは"fill color", "line color",
"font color"コマンドごとに3個作成するが、CustomColorChooserDialogオブジェクトは
DrawMainで1個だけ作成し
ObjectTableに登録する。
CustomColorChooserDialogオブジェクトを1個しか作成しない理由は次のような点である。
"fill color", "line color", "font color"コマンドのどのコマンドからどういう順序で呼び出されても、
次の2つのデータを継続的に利用できるようにする。
(a)CustomColorChooserDialogにインポートした色情報。
(b)CustomColorChooserDialogの表示位置。
もしCustomColorChooserDialogオブジェクトをコマンドごとに3個作成すると、上記(a), (b)のデータを継続的に利用するためには、(a),
(b)のデータを保持するクラスを別途用意する必要がある。これは煩雑である。
1.3 CustomColorChooserDialogのOKボタンをクリックしたときの処理
ColorSelectionListenerをインプリメントしている
ColorChooserActionオブジェクトの
colorSelectedメソッドが呼び出される(上記(2))。
public void colorSelected(ColorSelectionEvent event) {
Color selectedColor = event.getColor();
if(selectedColor==null) return;
Object[] args = new Object[1];
args[0] = selectedColor;
int commandId = Command.getCommandId(this.commandName);
if (commandId < 0) {
System.err.println("*** Error ColorChooserAction: specified
command not found;" + commandName);
return;
}
Command command = new Command(commandId, Command.callFromMenu, args);
ExecCommand execCommand = ObjectTable.getExecCommand("ColorChooserAction");
execCommand.exec(command);
}
[説明]
ColorSelectionEventから色を取り出し、コマンド("fill color", "line color"または "font
color"コマンド)を作成してExecCommand.execメソッドを呼び出してコマンドを実行する。
2. ButtonOfColorChooserクラス
戻る=>page top
public class ButtonOfColorChooser extends JToggleButton implements DrawMenuIF
フィールド
|
説明
|
action |
ColorChooserAction action=new ColorChooserAction(this);
このボタンのActionListener.
|
currentColor
|
Color currentColor
カラーチューザーで選ばれた色を設定する。
|
メソッド
|
説明
|
コンストラクタ (1)
|
ColorChooserButton(String commandName, String tip)
ボタンにはテキストを表示する。このボタンを押すとダイアログが開く。
引数:
commandName - コマンド名。
tip - tool tipに表示する文字列
処理
次のメソッドで設定を行う。
this.setActionCommand(commandName);
this.addActionListener(this.action);
this.setName(commandName);
this.setText(commandName);
this.setToolTipText(tip);
this.setStandardButtonStyle();
|
コンストラクタ (2)
|
public ButtonOfColorChooser(String commandName, boolean setText, ImageIcon
imageIcon, String tip)
引数:
commandName - コマンド名。
setText - trueならばボタンにコマンド名をImageIconの右側に表示する。
imageIcon - ボタンに表示するImageIcon。
tip - tool tipに表示する文字列
処理
次のメソッドで設定を行う。
super(imageIcon);
this.setActionCommand(commandName);
this.addActionListener(this.action);
this.setName(commandName);
if(setText) setText(commandName);
this.setToolTipText(tip);
this.setStandardButtonStyle();
|
setStandardButtonStyle
|
public void setStandardButtonStyle()
次のメソッドを呼んで設定を行う。
Border raisedBorder = new BevelBorder(BevelBorder.RAISED);
this.setBorder(raisedBorder);
this.setIconTextGap(0);
this.setHorizontalTextPosition(SwingConstants.CENTER );
this.setVerticalTextPosition(SwingConstants.BOTTOM );
this.setHorizontalAlignment(CENTER);
this.setFont(MenuConstants.MenuFont);
this.setBackground(null);
this.setForeground(Color.BLACK);
this.setOpaque(true);
|
getCurrentColor
|
public Color getCurrentColor()
currentColorを返す。
|
setCurrentColor
|
public void setCurrentColor(Color color)
パラメータをcurrentColorに設定する。
|
createColorChooser
Button (1)
|
public static JButton createColorChooserButton(String commandName, int
width, String tip)
コンストラクター(1)を使うメソッド。ボタンにはコマンド名を表示。アクセラレータは複数設定できる。
引数:
commandName - ボタンにつけるコマンド名。この名称をボタンに表示する。
アクションコマンド名として指定する。
width - ボタンの幅を指定する。幾つかのボタンの幅を同じにしたいときに指定する。
width<0の場合は、TextLayoutを使ってボタンの幅をテキストの幅から決める。
tip - tool tipに表示する文字列。
|
createColorChooser
Button (2)
|
public static JButton createColorChooserButton(String commandName, boolean
setText, String imageName, String tip)
コンストラクタ(2)を使うメソッド。ボタンにテキストと画像(ImageIcon)を表示できる。ImageIconを表示するのがデフォールトで、setText=trueならばテキストをも表示する。
引数:
commandName - ボタンにつけるコマンド名。この名称をボタンに表示する。
アクションコマンド名として指定する。
setText - setText=trueならばボタンにテキストとIconを表示する。falseならばIconだけを表示する。
imageName - ImageIcon画像のファイル名。
DrawImageIconでパス名を追加するので、ここではパス名は不要。
"rectangle.png", "ellipse.png", "group.png"など
tip - tool tipに表示する文字列。
|
3. ColorChooserActionクラス
戻る=>page top
class ColorChooserAction extends AbstractAction implements ColorSelectionListener
メソッド
|
説明
|
actionPerformed
|
public void actionPerformed(ActionEvent e)
∙ CustomColorChooserDialogをshowDialogメソッドで表示する。
CustomColorChooserDialogはDrawMain
でオブジェクトが作成されObjectTableに登録されている。
∙ CustomColorChooserDialogを表示させるコマンドの名称をダイアログに表示する。
コマンド名称はfill color, line colorまたはfont color
∙ ColorSelectionListenerをこのオブジェクトに設定する
設定の前に現在登録されているColorSelectionListenerを削除する。
dialog.removeColorSelectionListener();
dialog.addColorSelectionListener(this);
dialog.showDialog();
|
colorSelected |
public void colorSelected(ColorSelectionEvent event)
colorSelectedはColorSelectionListenerの定義するメソッド。
∙ CustomColorChooserDialogのOKボタンを押したときの色を取得する。
Color selectedColor = event.getColor();
∙ 次のようにcommandIdと引数を設定してCommandオブジェクトを作成し、
ExecCommandの
execメソッドを呼ぶ。
(a)commandId
int commandId
=Command.getCommandId
(this.buttonOfPulldownMenu.menu.getActionCommand());
(b)引数
params[0]=selectedColor;
|
4. CustomColorChooserDialogクラス
戻る=>page top
public class CustomColorChooserDialog extends JDialog implements ActionListener,
ComponentListener, WindowListener, SelectionListener
JColorChooser.showDialogで表示されるダイアログに代わるカラーチューザーダイアログ
|
|
図(a) JColorChooserのダイアログ |
図(b) CustomColorChooserDialogのダイアログ |
CustomColorChooserDialogの機能
機能
|
説明
|
(1)import colorsボタン
|
=>図(b)
• 初期状態
DrawTopを開始して初めてカラーチューザダイアログを開いたときは、"imported colors"パネルには何も色は取り込まれていない。但し参考のためWhite,
Black, Red, Green, Blueだけを表示している。色の取り込みは次の手順で行う。
• 色の取り込み(Import)
画面上の図形を選択し "imported colors"ボタンをクリックするとすると、
選択図形に設定されている色(fill
color, line color)およびテキストの色(font color)を全てImported colorsパネルに取り込む。
• 色を選択図形、選択テキストに指定
図形またはテキストに色を指定するときは、JColorChooserパネルで色を選択するか、
"Imported colors"パネル上の色をクリックして選択する。選択された色はPreviewパネルに表示され、
OKボタンを押すと図形またはテキストに色を設定する。
|
(2)delete colorsボタン |
"Imported colors"パネルの色を選択してdelete colorsボタンを押すとパネルの色が削除される。ShiftキーまたはCtrlキーを押しながら続けてクリックすると、複数の色を選択できる。選択された色はダークグレイの枠で表示される。
|
(3)このダイアログで設定した色の受け取り方 |
=>1.3
• ColorSelectionListenerインターフェイスをインプリメント(implements)。
• colorSelectedメソッドをインプリメント。
public void colorSelected(ColorSelectionEvent event) {
Color color = event.getColor();
}
このダイアログから色を受け取るオブジェクトはColorChooserAction。
|
フィールド
|
説明
|
commandName |
String commandName="";
図(b)上段の黒いパネルに表示されている名称。カラーチューザーダイアログを開いたコマンド名で、"fill color", "line
color", "font color"のいずれか。 |
commandLabel |
JLabel commandLabel;
図(b)上段の黒いパネル。コマンド名を表示する。 |
colorChooser
|
JColorChooser colorChooser
図(b)上段のカラーチューザパネルオブジェクト
|
previewPanel |
PreviewPanel previewPanel
図(b)下段左のプレビューパネルオブジェクト
|
importedColorsPanel |
ImportedColorsPanel importedColorsPanel
図(b)下段右の取り込みパネルオブジェクト
|
dialogLocation |
Point dialogLocation=new Point(100, 100);
ダイアログの表示位置。DrawMainのフレームに対する相対位置。
|
okButton |
JButton okButton
OKボタンオブジェクト
|
cancelButtonl |
JButton cancelButtonl
Cancelボタンオブジェクト
|
importButton |
JButton importButton
importedColorsPanel 上のImportボタンオブジェクト
|
deleteButton |
JButton deleteButton
importedColorsPanel 上のDeleteボタンオブジェクト
|
listenerList |
protected EventListenerList listenerList = new EventListenerList();
ColorSelectionListenerを格納するリスト。
ColorSelectionListenerをインプリメントしたクラスはpreviewPanel。
|
メソッド
|
説明
|
コンストラクタ
|
public CustomColorChooserDialog(JFrame frame)
引数:
frame - このダイアログを設定するのフレーム。
処理: initializeDialogを呼んでこのダイアログを初期化 |
initializeDialog |
public void initializeDialog()
このダイアログを初期設定を行う
• colorChooser、importedColorsPanel、previewPanelオブジェクトの作成とフィールド変数への設定
• 各種ボタン類の作成とフィールド変数への設定
|
showDialog |
public void showDialog(String commandName)
commadName - "fill color", "line color", "font colorのどれか"
このダイアログを表示する。このダイアログをWindowListenerとして設定する。
: colorChooserとimportedColorsPanelへの初期設定
this.getColorChooser().setColor(Color.WHITE);
this.getColorChooser().setColor(Color.BLACK);
Color[] colors={Color.WHITE, Color.BLACK, Color.RED, Color.GREEN, Color.BLUE};
this.getImportedColorsPanel().setImportedColors(colors);
|
getCommandName |
protected String getCommandName()
commandNameを返す。 |
getColorChooser |
protected JColorChooser getColorChooser()
colorChooserを返す。
|
getPreviewPanel |
protected PreviewPanel getPreviewPanel()
previewPanelを返す。
|
getImportedColorsPanel |
protected ImportedColorsPanel getImportedColorsPanel()
importedColorsPanelを返す。
|
setPreviewColor |
public void setPreviewColor(Color color, String command)
previewPanelに色を設定する。
|
getPreviewColor |
public Color getPreviewColor(String command)
previewPanelの色を返す。
|
actionPerformed |
public void actionPerformed(ActionEvent e)
OK, Cancelボタン、importedColorsPanelのimportチェックボックス、deleteボタンのアクション処理を行う。
(注) importチェックボックス、deleteボタンはimportedColorsPanelのコンポーネントなので、importedColorsPanelでアクション処理を行えばよいわけだが、全体の制御を分かりやすくするため、ここで処理する。
• OKボタン
previewPanelの色を取得し、
fireEventメソッドでColorSelectionEventを作成する。
• Cancelボタン - closeDialogを呼ぶ
• importボタン
選択されている図形の色をインポートする。
• deleteボタン
importedColorsPanelから色を削除する。
|
importColors |
public void importColors()
選択されている図形の色をimportedColorsPanelに設定する。 |
selected |
public void selected(SelectionEvent event)
SelectionListenerの定義するメソッド
選択した図形から色を取り出す処理を行う
=>(1)import colorsチェックボックス |
addColorSelection
Listener |
public void addColorSelectionListener(ColorSelectionListener listener)
OKボタンを押したときに、色選択イベントを受け取るために、ColorSelectionListenerをインプリメントしたオブジェクトをlistenerListに登録する。
ColorSelectionListenerをインプリメントするクラスはColorChooserAction
=>(3)このダイアログで設定した色の受け取り方 |
removeColorSelection
Listener |
public void removeColorSelectionListener(ColorSelectionListener listener)
上記登録したオブジェクトをlistenerListから削除する。 |
removeColorSelection
Listener |
public void removeColorSelectionListener()
listenerListからすべてのオブジェクトを削除する。 |
fireEvent |
public void fireEvent(ColorSelectionEvent event)
このダイアログが色を選択したときに、listenerListに登録されているオブジェクトに通知する。 |
closeDialog |
protected void closeDialog()
このダイアログを閉じる。
removeColorSelectionListenerを呼んで、listenerListからすべてのオブジェクトを削除する。
SelectionLSの removeSelectionListenerを呼んで、このダイアログのSelectionListenerとしての登録を削除する。 |
windowClosing |
public void windowClosing(WindowEvent e)
WindowListenerのメソッド。これ以外のメソッドでは何もしない。
このダイアログを閉じる。 |
componentMoved |
public void componentMoved(ComponentEvent e)
ComponentListenerのメソッド。これ以外のメソッドでは何もしない。
dialogLocationにダイアログの現在位置をセットする。 |
5. ColorSelectionListener インターフェイス
戻る=>page top
interface ColorSelectionListener extends EventListener
メソッド
|
説明
|
colorSelected
|
public void colorSelected(ColorSelectionEvent event)
色選択のアクションが発生したときに呼び出されるメソッド。.
|
6. ColorSelectionEventクラス
戻る=>page top
Class ColorSelectionEvent
フィールド
|
説明
|
color
|
Color color
図形をクリックして選択したとき"clicked"、マウスドラッグで図形を選択したとき"dragged"。
|
メソッド
|
説明
|
コンストラクタ
|
public ColorSelectionEvent(Object source, Color color)
引数をcolorフィールド変数に設定
|
getColor |
public Color getColor()
colorフィールド変数の値を返す。 |
|