0

私の質問はJavaスイングフレームに関するものです。私は2つのjframeを持っています。jframe1 と jframe2。jframe1には1つのjbuttonがあり、ユーザーがjbuttonをクリックするとjframe 2が表示されます。jframe2にはテキストボックスがあり、jbuttonユーザーはテキストボックスに値を入力できます。ユーザーがjbuttonをクリックすると、最初のjframeにフォーカスを設定して渡しますユーザーが jframe1 の jlable に値を入力しました。これを行うのを手伝ってください。

4

1 に答える 1

2

2番目のフレームはむしろダイアログであり、値を入力するために使用され、呼び出し元に返されます(最初のフレーム)。

これを実現するには、 modal を作成し、JDialogそこにコントロール (テキスト フィールド、OK、おそらくキャンセル ボタン) を追加し、ダイアログを開き (発信者をブロック)、キャンセルされない限り入力されたテキストを返すメソッドを追加します。そうすれば、入力したテキストを変数に一時的に格納する必要なく (通常は悪い習慣です)、入力したテキストを直接渡すことができます。

このようなダイアログの簡単な実装を次に示します。

public class SwingTestDialog extends JDialog {

    private JTextField text;
    private boolean cancelled = true;

    public static void main (String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run () {
                SwingTestDialog dialog = new SwingTestDialog();
                String text = dialog.selectValue();
                System.out.println("Selected: " + text);
            }
        });
    }

    public SwingTestDialog () {
        setModal(true);
        setTitle("Please enter something");
        JPanel content = new JPanel();
        content.setLayout(new BorderLayout(10, 10));
        getContentPane().add(content);

        text = new JTextField();
        JButton ok = new JButton("Accept");
        JButton cancel = new JButton("Cancel");
        JPanel buttons = new JPanel();
        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));
        buttons.add(ok);
        buttons.add(cancel);

        content.add(text, BorderLayout.NORTH);
        content.add(buttons, BorderLayout.SOUTH);
        content.setBorder(new EmptyBorder(15, 15, 15, 15));
        pack();

        ok.addActionListener(new ActionListener() {

            public void actionPerformed (ActionEvent e) {
                cancelled = false;
                dispose();
            }
        });
        cancel.addActionListener(new ActionListener() {

            public void actionPerformed (ActionEvent e) {
                cancelled = true;
                dispose();
            }
        });
        // default button, allows to trigger ok when pressing enter in the text field
        getRootPane().setDefaultButton(ok);
    }

    /**
     * Open the dialog (modal, blocks caller until dialog is disposed) and returns the entered value, or null if
     * cancelled.
     */
    public String selectValue () {
        setVisible(true);
        return cancelled ? null : text.getText();
    }
}
于 2013-08-19T16:33:52.383 に答える