2

JTextFieldとJButtonを備えたJFrameがあります。JOptionPane.showInputDialog()のように動作させたい。基本的には、それを作成してから、.start()などを呼び出して表示し、ボタンが押されるのを待ってから、JTextFieldの内容を返します。wait()/ notify()がこれを行う可能性があると聞きましたが、それが正しいかどうかはわかりません。正しい場合は、使用方法の簡単な例を見ることができますか?

4

2 に答える 2

3

また、JDialogはカスタム入力ダイアログのソリューションであり、開発をスピードアップするのに役立つライブラリがあります。これはTaskDailogと呼ばれます。

詳細については、http://code.google.com/p/oxbow/wiki/TaskDialogIntroduction?tm=6をご覧ください。

于 2012-06-20T03:55:04.607 に答える
3

ここでは、次を使用してこのコード例を試してくださいJDialog

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DialogExample extends JFrame
{
    private JLabel nameLabel;

    public DialogExample()
    {
        super("Dialog Example");
    }

    private void createAndDisplayGUI()
    {       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        nameLabel = new JLabel();
        contentPane.add(nameLabel);

        setContentPane(contentPane);
        setSize(200, 100);
        setLocationByPlatform(true);
        setVisible(true);

        MyDialog dialog = new MyDialog(this, "Credentials : ", true);
        dialog.createAndDisplayGUI();
    }

    public void setName(String name)
    {
        if (name.length() > 0)
            nameLabel.setText(name);
        else
            nameLabel.setText("Empty string received.");
    }


    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new DialogExample().createAndDisplayGUI();
            }
        });
    }
}

class MyDialog extends JDialog
{
    private JTextField nameField;
    private JFrame frame;

    public MyDialog(JFrame f
            , String title, boolean isModal)
    {
        super(f, title, isModal);
        frame = f;
    }

    public void createAndDisplayGUI()
    {
        JPanel contentPane = new JPanel();
        contentPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
        JLabel nameLabel = new JLabel("Please Enter your Name : ");
        nameField = new JTextField(10);
        JButton submitButton = new JButton("SUBMIT");
        submitButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                if (nameField.getDocument().getLength() > 0)
                    frame.setName(nameField.getText());
                else
                    frame.setName("");
                MyDialog.this.dispose();    
            }
        });

        contentPane.add(nameLabel);
        contentPane.add(nameField);
        contentPane.add(submitButton);

        add(contentPane);
        pack();
        setVisible(true);
    }
}
于 2012-06-20T03:59:43.843 に答える