めも太郎

思ったことを、めもする

ImageJのプラグイン -ij.gui.GenericDialogクラス -SurfacePlotterクラス(3): showDialogメソッド

SurfacePlotterクラスの続きです。

showDialogメソッドを見ます。

/////CODE1/////
boolean showDialog() {
   GenericDialog gd = new GenericDialog("Surface Plotter");
   gd.addNumericField("Polygon Multiplier (10-200%):", polygonMultiplier, 0);
   gd.addCheckbox("Draw_Wireframe", showWireframe);
   gd.addCheckbox("Shade", showGrayscale);
   gd.addCheckbox("Draw_Axis", showAxis);
   gd.addCheckbox("Source Background is Lighter", whiteBackground);
   gd.addCheckbox("Fill Plot Background with Black", blackFill);
   gd.addCheckbox("One Polygon Per Line", oneToOne);
   gd.addCheckbox("Smooth", smooth);
   gd.showDialog();
   if (gd.wasCanceled())
	return false;
   polygonMultiplier = (int)gd.getNextNumber();
   showWireframe = gd.getNextBoolean();
   showGrayscale = gd.getNextBoolean();
   showAxis = gd.getNextBoolean();
   whiteBackground = gd.getNextBoolean();
   blackFill = gd.getNextBoolean();
   oneToOne = gd.getNextBoolean();
   smooth = gd.getNextBoolean();
   if (showWireframe && !showGrayscale)
	blackFill = false;
   if (polygonMultiplier>400) polygonMultiplier = 400;
   if (polygonMultiplier<10) polygonMultiplier = 10;
   return true;
}

まずGenericDialogクラスというのが出てきます。これはImageJでカスタマイズできるダイアログボックスを提供するクラスです。

解説を見ると、

ij.gui.GenericDialog
public class GenericDialog extends Dialog implements ActionListener, TextListener,FocusListener, ItemListener, KeyListener, AdjustmentListener, WindowListener
This class is a customizable modal dialog box.

説明は、まぁ、そのまんまですね。java.awt.Dialogクラスの拡張クラスであり、各種リスナークラスを継承しています。コンストラクタは2種類あります。

public GenericDialog(String title)
Creates a new GenericDialog with the specified title. Uses the current image window as the parent frame or the ImageJ frame if no image windows are open.

public GenericDialog(String title, Frame parent)
Creates a new GenericDialog using the specified title and parent frame.

親フレームを自動選択するか、指定するかということですね。

CODE1に戻ります。生成したGenericDialogオブジェクトにパーツを追加していきます。
addNumericFieldメソッドとaddCheckboxメソッドコンポーネントを追加しています。それぞれオーバーロードがあります。

ij.gui.GenericDialog
public void addNumericField(String label, double defaultValue, int digits)
Adds a numeric field.
param: label: the label
param: defaultValue: value to be initially displayed
param: digits: number of digits to right of decimal point

ij.gui.GenericDialog
public void addNumericField(String label, double defaultValue, int digits, int columns, String units)
Adds a numeric field.
param: label: the label
param: defaultValue: value to be initially displayed
param: digits: number of digits to right of decimal point
param: columns: width of field in characters
param: units: a string displayed to the right of the field

数値入力欄を追加するメソッドです。defaultValueはフレームを開いたときはじめに表示される値。digitsは有効な小数点以下の桁数。columnsは入力欄の幅(半角文字数で指定)。unitsは入力欄の右側に表示される単位。columnsとunitsを指定しない場合は、入力欄の幅は半角6文字、単位はなし、となります。

ij.gui.GenericDialog
public void addCheckbox(String label, boolean defaultValue)
Adds a checkbox.
param: label: the label
param: defaultValue: the initial state

ij.gui.GenericDialog
private void addCheckbox(String label, boolean defaultValue, boolean isPreview)
Adds a checkbox; does not make it recordable if isPreview is true. With isPreview true, the checkbox can be referred to as previewCheckbox from hereon.

チェックボックスの追加。ラベルと初期の選択状態を指定します。isPrevewがある方は、isPreviewをtrueにするとマクロ機能で記録されなくなるようです。

CODE1に戻ります。
GenericDialogクラスのshowDialogメソッドでダイアログボックスを可視化します。表示されたダイアログボックス上でcancelが押されると、ダイアログボックスが閉じて、wasCanceldメソッドにtrueが返されます。これによりshowDialogメソッドはfalseを返して終了し、SufacePlotterクラスのrunメソッドもこれを受けて終了します。

getNextNumberメソッドは数値入力欄から数値を取得します。getNextBooleanメソッドチェックボックスの選択状態を取得します。その他もろもろ設定して、最終的にtrueを返します。

次回はパラメタの意味を見てみます。
ようやく画像関係の話にたどり着きました…(+_+)