如何让JFrame存储数据而不刷新?

时间:2018-05-23 12:31:38

标签: java jframe

即使在关闭打开单独的jframe之后,如何在jframe中存储信息,以便在重新打开第一个jframe时,仍会列出相同的信息?

所以基本上我有一个带搜索按钮和个人资料按钮的jFrame。视图配置文件按钮将您带到一个不同的Jframe,其中包含所有"搜索历史记录"被储存了。但是,每当您返回主页面并再次打开配置文件时,配置文件将刷新并再次启动。我希望按钮再次打开完全相同的窗口,而不是GUI的新窗口。我怎么做?

1 个答案:

答案 0 :(得分:0)

如果我的问题正确,那么您需要的是secondFrame.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);

但是,建议不要使用2个JFrame。您可以使用JDialog代替“第二帧”。

此外,如果您在按钮中初始化它的动作,则每次单击按钮时,侦听器都无法工作,它将创建一个新的Dialog。所以你必须先将它初始化。看一下这个例子:

package test;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class TestFrame extends JFrame {
    private JDialog secondFrame;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new TestFrame().setVisible(true);
        });
    }

    public TestFrame() {
        super("Frame");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new FlowLayout());
        initializeSecondFrame();

        JButton button = new JButton("Show \"Second Frame\".");
        button.addActionListener(e -> {
            secondFrame.setVisible(true);
        });
        getContentPane().add(button);
        setSize(300, 300);
    }

    private void initializeSecondFrame() {
        secondFrame = new JDialog(this);
        // When "X" button is presed, dialog does nothing.
        secondFrame.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        secondFrame.getContentPane().setLayout(new FlowLayout());
        JTextField textField = new JTextField(10);
        secondFrame.getContentPane().add(textField);
        secondFrame.setSize(300, 300);
    }
}

按钮的唯一功能是使对话框(已启动)可见。现在,如果您在对话框中编辑TextField a.k.a secondFrame,然后关闭它,然后再次按下该按钮,文本字段将显示其文本。