好吧,我现在遇到这个新手问题。

我有3个JFrame。 JFrame1打开JFrame2; JFrame2得到单词,然后重新打开JFrame1; JFrame1用在JFrame2中使用的单词打开JFrame3。

我遇到的问题与JFrame3的创建有关。我的意思是,我知道如何直接从JFrame2转到JFrame3(通过构造函数,通过参数传递我找到的单词)。我正在尝试从JFrame2中获取单词,并将其放入JFrame3中,但是使最后一个不可见(this.setVisible(false))。然后,当我返回JFrame1并单击按钮时,它将使用来自JFrame2的单词将我重定向到JFrame3。我认为这类似于[...]。setVisible(true)。

当我单击JFrame1上的按钮时,我不想创建一个新的JFrame3()。因为这样做,我将失去在JFrame2中获得的所有东西。因此,基本上,我只想再次显示JFrame3。不必创建一个新的并且丢失我所有的东西。

我希望有人能理解我要说的话,并能以某种方式帮助我。
预先谢谢大家。对不起,英语不好。

顺便说一句,我正在使用Netbeans-Java。

最佳答案

JFrame1打开JFrame2; JFrame2收到单词,然后重新打开
  JFrame1; JFrame1用在JFrame2中使用的单词打开JFrame3。


import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class MultiFrames implements ActionListener
{
    private JFrame frame1, frame2, frame3;
    private String message;
    private JTextField txtFiled;
    private JButton btn1, btn2;
    private JLabel lbl;
    private boolean flag = false;

    private static final String BUTTON1_COMMAND = "btn1";
    private static final String BUTTON2_COMMAND = "btn2";

    public MultiFrames()
    {
        frame1 = new JFrame("JFrame #1");
        frame2 = new JFrame("JFrame #2");
        frame3 = new JFrame("JFrame #3");

        frame1.setLayout(new FlowLayout());
        frame2.setLayout(new FlowLayout());
        frame3.setLayout(new FlowLayout());

        frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setSize(200, 100);
        frame1.setLocationRelativeTo(null);

        frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame2.setSize(200, 100);
        frame2.setLocationRelativeTo(null);

        frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame3.setSize(200, 100);
        frame3.setLocationRelativeTo(null);

        txtFiled = new JTextField(10);
        frame2.add(txtFiled);

        lbl = new JLabel();
        frame3.add(lbl);

        btn1 = new JButton("Open JFrame #2");
        btn2 = new JButton("Re-Open JFrame #1");

        btn1.addActionListener(this);
        btn1.setActionCommand(BUTTON1_COMMAND);
        btn2.addActionListener(this);
        btn2.setActionCommand(BUTTON2_COMMAND);

        frame1.add(btn1);
        frame2.add(btn2);

        frame1.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        String s = e.getActionCommand();

        if(s.equals(BUTTON1_COMMAND))
        {
            if(!flag)
            {
                frame1.setVisible(false);
                frame2.setVisible(true);
                flag = true;
            }
            else
            {
                frame1.setVisible(false);
                frame3.setVisible(true);
                lbl.setText("The word is: " + message);
            }
        }
        else if(s.equals(BUTTON2_COMMAND))
        {
            frame2.setVisible(false);
            frame1.setVisible(true);
            message = txtFiled.getText();
            btn1.setText("Open JFrame #3");
        }
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new MultiFrames();
            }
        });
    }
}

08-07 17:08