web-dev-qa-db-ja.com

Java-カスタムダイアログボックスの作成方法

JFrameにボタンがあり、クリックすると、ダイアログボックスにユーザー入力用の複数のテキスト領域がポップアップするようにします。私はこれを行う方法を見つけ出すために周りを見回していましたが、私はもっと混乱し続けています。誰でも助けることができますか?

42
Corrie

カスタム動作の方法であまり必要ない場合は、JOptionPaneが時間の節約になります。 OK /キャンセルオプションの配置とローカライズを処理し、独自のクラスを定義する必要なしにカスタムダイアログをすばやく簡単に表示できます。ほとんどの場合、JOptionPaneの「メッセージ」パラメーターは文字列ですが、JComponentまたはJComponentsの配列も渡すことができます。

例:

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);
}
80
Sam Barnum

好みに合わせてダイアログをカスタマイズするには、次の簡単なクラスを試してください。

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>";
    }
}
3
BullyWiiPlaza

基本的に、JDialogを作成し、テキストコンポーネントを追加して表示します。問題が発生している特定のビットを絞り込むと役立つ場合があります。

1
Neil Coffey

このレッスン from Javaチュートリアルでは、例とAPIリンクを使用して各Swingコンポーネントを詳細に説明します。

1
bdl

NetBeans IDE (現時点で最新バージョンは6.5.1)を使用している場合、それを使用して基本的なGUI Java File-> Newを使用してアプリケーションを作成できます。プロジェクトを選択して、Javaカテゴリ、次にJavaデスクトップアプリケーション。

作成すると、メニュー選択を使用して開くことができるアバウトボックスを含むシンプルなベアボーンGUIアプリが作成されます。これをニーズに合わせて調整し、ボタンをクリックしてダイアログを開く方法を学習できるはずです。

ダイアログを視覚的に編集できるようになります。そこにあるアイテムを削除し、いくつかのテキスト領域を追加します。それで遊んで、あなたが動けなくなるならば、より多くの質問で戻ってきてください:)

1
Arnold Spence

カスタムダイアログAPIを作成しました。こちらをご覧ください https://github.com/MarkMyWord03/CustomDialog 。メッセージと確認ボックスをサポートしています。 joptionpaneのような入力とオプションのダイアログはすぐに実装されます。

CUstomDialog APIのサンプルエラーダイアログ: CustomDialog Error Message

1
MarkMyWord03