RunClientエンジンにて表示される メッセージダイアログ (項目チェックなど) について、
独自のダイアログクラスに変更する事が可能です。
クラス作成は、jp.ne.mki.wedge.run.interfaces.StandardDialog を実装するか、
jp.ne.mki.wedge.pub.client.dialog.DefaultStandardDialog を継承して作成することが可能です。
since:Version.1.1.3
実装が必要なメソッドの種類・詳細は jp.ne.mki.wedge.run.interfaces.StandardDialog の JavaDoc をご覧下さい。
このドキュメントでは ダイアログの色を任意に設定した 「カラフルダイアログ」クラスを作成しつつ
作成方法を説明いたします。
package jp.ne.mki.wedge.sample.dialog;
import jp.ne.mki.wedge.pub.client.dialog.DefaultStandardDialog;
/**
* カラフルダイアログ
*/
public class ColorfulDialog extends DefaultStandardDialog{
}
import jp.ne.mki.wedge.pub.client.dialog.DefaultStandardDialog; /** * カラフルダイアログ */ public class ColorfulDialog extends DefaultStandardDialog{ public int showOptionDialog( Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue) throws HeadlessException{ //ダイアログ生成 JOptionPane op = new JOptionPane(message, messageType, optionType, icon, options); JDialog dlg = op.createDialog(parentComponent, title); //ダイアログの装飾設定 ※1 setDialogProperty(dlg,messageType); dlg.setVisible(true); dlg.dispose(); // 選択されたボタンを取得します。 Object selectedValue = op.getValue(); if (selectedValue == null) { return JOptionPane.CLOSED_OPTION; } else if (options == null) { // Option Type が指定された場合(options の文字配列が指定されなかった場合) // XXX_OPTION が Integer オブジェクトに格納して返されるので、整数に変換して返します。 if (selectedValue instanceof Integer) { return ((Integer) selectedValue).intValue(); } else { return JOptionPane.CLOSED_OPTION; } } else { // options の文字配列が指定された場合、選択された項目のインデックスを返します。(0 origin) int optionCount = options.length; for (int ii = 0; ii < optionCount; ii++) { if (selectedValue.equals(options[ii])) { return ii; } } return JOptionPane.CLOSED_OPTION; } } /** * ダイアログに装飾を加える * @param dlg ダイアログ * @param messageType メッセージタイプ */ protected void setDialogProperty(JDialog dlg,int messageType){ ※2 } }
//エラーの場合は 赤色系 if(messageType == JOptionPane.ERROR_MESSAGE){ setBackColorAll(dlg, new Color(0xCC9999), new Color(0xCC0033)); } //WARNINGの場合は 黄色系 else if(messageType == JOptionPane.WARNING_MESSAGE){ setBackColorAll(dlg, new Color(0xFFFF66), new Color(0xFFCC66)); } //その他の場合は 緑系 else{ setBackColorAll(dlg, new Color(0x99CC99), new Color(0x669966)); } //ボタンのBorderを変更 CompoundBorder newBorder = new CompoundBorder( new BevelBorder(BevelBorder.RAISED), new BasicBorders.MarginBorder()); setButtonBorderAll(dlg,newBorder);
<dialog> <standard class="jp.ne.mki.wedge.sample.dialog.ColorfulDialog" /> </dialog>
package jp.ne.mki.wedge.sample.dialog; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.HeadlessException; import javax.swing.AbstractButton; import javax.swing.Icon; import javax.swing.JDialog; import javax.swing.JOptionPane; import javax.swing.border.BevelBorder; import javax.swing.border.Border; import javax.swing.border.CompoundBorder; import javax.swing.plaf.basic.BasicBorders; import jp.ne.mki.wedge.pub.client.dialog.DefaultStandardDialog; /** * カラフルダイアログ * サンプル提供クラスです。 * */ public class ColorfulDialog extends DefaultStandardDialog{ /** * 指定されたアイコンを持つダイアログを表示します。 * options パラメータが指定された場合、選択一覧は options に指定された値になります。 * @param parentComponent ダイアログを表示する Frame を指定します。 * @param message 表示する Object * @param title ダイアログのタイトル文字列 * @param optionType ダイアログで選択可能なオプションを指示する整数。 * @param messageType 主にプラグイン可能な Look & Feel のアイコンを指定するために使用されるメッセージの種類を表す整数。 * @param icon ダイアログに表示するアイコン * @param options ユーザが選択可能な項目を示すオブジェクトの配列。 * @param initialValue ダイアログのデフォルト選択を示すオブジェクト。 * @return ユーザが選択したオプションを示す整数。 */ public int showOptionDialog( Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue) throws HeadlessException{ //ダイアログ生成 JOptionPane op = new JOptionPane(message, messageType, optionType, icon, options); JDialog dlg = op.createDialog(parentComponent, title); //ダイアログの装飾設定 setDialogProperty(dlg,messageType); dlg.setVisible(true); dlg.dispose(); // 選択されたボタンを取得します。 Object selectedValue = op.getValue(); if (selectedValue == null) { return JOptionPane.CLOSED_OPTION; } else if (options == null) { // Option Type が指定された場合(options の文字配列が指定されなかった場合) // XXX_OPTION が Integer オブジェクトに格納して返されるので、整数に変換して返します。 if (selectedValue instanceof Integer) { return ((Integer) selectedValue).intValue(); } else { return JOptionPane.CLOSED_OPTION; } } else { // options の文字配列が指定された場合、選択された項目のインデックスを返します。(0 origin) int optionCount = options.length; for (int ii = 0; ii < optionCount; ii++) { if (selectedValue.equals(options[ii])) { return ii; } } return JOptionPane.CLOSED_OPTION; } } /** * ダイアログに装飾を加える * @param dlg ダイアログ * @param messageType メッセージタイプ */ protected void setDialogProperty(JDialog dlg,int messageType){ //背景色を変更 //エラーの場合は 赤色系 if(messageType == JOptionPane.ERROR_MESSAGE){ setBackColorAll(dlg, new Color(0xCC9999), new Color(0xCC0033)); } //WARNINGの場合は 黄色系 else if(messageType == JOptionPane.WARNING_MESSAGE){ setBackColorAll(dlg, new Color(0xFFFF66), new Color(0xFFCC66)); } //その他の場合は 緑系 else{ setBackColorAll(dlg, new Color(0x99CC99), new Color(0x669966)); } //ボタンのBorderを変更 CompoundBorder newBorder = new CompoundBorder( new BevelBorder(BevelBorder.RAISED), new BasicBorders.MarginBorder()); setButtonBorderAll(dlg,newBorder); } /** * 全てのコンポーネントに背景色設定 * @param comp 設定対象となるContainer * @param color ボタン以外の色 * @param btnColor ボタンの色 */ protected void setBackColorAll(Container comp,Color color,Color btnColor){ int size = comp.getComponentCount(); for(int i=0; i<size; i++){ Component child = comp.getComponent(i); if(child instanceof AbstractButton){ child.setBackground(btnColor); } else{ child.setBackground(color); } if(child instanceof Container){ setBackColorAll((Container)child, color, btnColor); } } } /** * 全てのボタンコンポーネントにBorder設定 * @param comp 設定対象となるContainer * @param border */ protected void setButtonBorderAll(Container comp,Border border){ int size = comp.getComponentCount(); for(int i=0; i<size; i++){ Component child = comp.getComponent(i); if(child instanceof AbstractButton){ ((AbstractButton)child).setBorder(border); } else if(child instanceof Container){ setButtonBorderAll((Container)child, border); } } } }