Java-カスタムダイアログボックスを作成する方法は?
-
16-09-2019 - |
質問
JFRAMEにボタンがあります。クリックしたときに、ユーザー入力のために複数のテキスト領域を備えたダイアログボックスが必要です。私はこれを行う方法を理解しようとしていますが、もっと混乱し続けています。誰かが助けることができますか?
解決
カスタム行動の方法であまり必要ない場合、JoptionPaneは良い時間の節約です。 OK /キャンセルオプションの配置とローカリゼーションを処理し、独自のクラスを定義する必要なくカスタムダイアログを表示するための迅速かつ損なわれた方法です。ほとんどの場合、JoptionPaneの「メッセージ」パラメーターは文字列ですが、jComponentsのjcomponentまたは配列も渡すことができます。
例:
JTextField firstName = new JTextField();
JTextField lastName = new JTextField();
JPasswordField password = new JPasswordField();
final JComponent[] inputs = new JComponent[] {
new JLabel("First"),
firstName,
new JLabel("Last"),
lastName,
new JLabel("Password"),
password
};
int result = JOptionPane.showConfirmDialog(null, inputs, "My custom dialog", JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
System.out.println("You entered " +
firstName.getText() + ", " +
lastName.getText() + ", " +
password.getText());
} else {
System.out.println("User canceled / closed the dialog, result = " + result);
}
他のヒント
あなたの好みに合わせてダイアログをカスタマイズするためにこのシンプルなクラスを試してください:
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRootPane;
public class CustomDialog
{
private List<JComponent> components;
private String title;
private int messageType;
private JRootPane rootPane;
private String[] options;
private int optionIndex;
public CustomDialog()
{
components = new ArrayList<>();
setTitle("Custom dialog");
setMessageType(JOptionPane.PLAIN_MESSAGE);
setRootPane(null);
setOptions(new String[] { "OK", "Cancel" });
setOptionSelection(0);
}
public void setTitle(String title)
{
this.title = title;
}
public void setMessageType(int messageType)
{
this.messageType = messageType;
}
public void addComponent(JComponent component)
{
components.add(component);
}
public void addMessageText(String messageText)
{
JLabel label = new JLabel("<html>" + messageText + "</html>");
components.add(label);
}
public void setRootPane(JRootPane rootPane)
{
this.rootPane = rootPane;
}
public void setOptions(String[] options)
{
this.options = options;
}
public void setOptionSelection(int optionIndex)
{
this.optionIndex = optionIndex;
}
public int show()
{
int optionType = JOptionPane.OK_CANCEL_OPTION;
Object optionSelection = null;
if(options.length != 0)
{
optionSelection = options[optionIndex];
}
int selection = JOptionPane.showOptionDialog(rootPane,
components.toArray(), title, optionType, messageType, null,
options, optionSelection);
return selection;
}
public static String getLineBreak()
{
return "<br>";
}
}
このレッスン Javaチュートリアルから、各スイングコンポーネントについて詳細に説明し、例とAPIリンクを説明しています。
使用する場合 NetBeans IDE (現時点での最新バージョンは6.5.1)、ファイル - >新しいプロジェクトを使用して基本的なGUI Javaアプリケーションを作成し、Javaカテゴリを選択してからJavaデスクトップアプリケーションを選択できます。
作成されると、メニューの選択を使用して開くことができるアバウンドボックスを含むシンプルなBare Bones GUIアプリがあります。これをニーズに合わせて、ボタンクリックからダイアログを開く方法を学ぶことができるはずです。
ダイアログを視覚的に編集できます。そこにあるアイテムを削除し、テキスト領域を追加します。それを使って遊んで、立ち往生している場合はもっと質問を持って戻ってきてください:)
まあ、基本的にJDialogを作成し、テキストコンポーネントを追加して表示します。あなたが問題を抱えている特定のビットを絞り込むと、それは役立つかもしれません。
カスタムダイアログAPIを作成しました。こちらでチェックしてください https://github.com/markmyword03/customdialog. 。メッセージと確認ボックスをサポートします。 JoptionPaneのように入力とオプションのダイアログはまもなく実装されます。
CustomDialog APIからのサンプルエラーダイアログ:customdialogエラーメッセージ