如何通过单击按钮从另一个jframe打开隐藏的jframe

时间:2016-03-17 16:03:28

标签: java swing

我有一个名为TabletAddDetails的Jframe,当我点击后退按钮时,Jframe TabletAddDetails将被隐藏并打开Jframe Tablet。 Jframe Tablet中有一个按钮,打开Jframe TabletAddDetails。有没有什么方法可以打开相同的以前隐藏的Jframe TabletAddDetails而不是一个全新的Jframe TabletAddDetails实例,这样当我回来时我的进度条更新不会丢失。

以下是Jframe TabletAddDetails中后面Buttom的代码

JButton btnBack = new JButton("BACK");
        btnBack.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                try
                {

                Tablet tab=new Tablet();
                tab.setVisible(true);
                tab.setLocationRelativeTo(null);
                tab.setResizable(false);
                tab.setTitle("Tablet"); 
                setVisible(false);
                                try {
                    tab.setIconImage(ImageIO.read(new File("img/icon.png")));
                }
                catch (IOException exc) {
                    exc.printStackTrace();
                }

                }
                 catch (Exception e) 
                {

                     JOptionPane.showMessageDialog(null,e.getClass().getName() + ": " + e.getMessage()); 
                    }
            }
        });

以下是Jframe Tablet中按钮TabletAddDetails的代码

JButton btnDetails = new JButton("TabletAddDetails");
        btnDetails.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                try
                {

                TabletAddDetails tabadd=new TabletAddDetails();
                tabadd.setVisible(true);
                tabadd.setLocationRelativeTo(null);
                tabadd.setResizable(false);
                tabadd.setTitle("Tablet Add Details"); 
                setVisible(false);
                                    try {
                    tabadd.setIconImage(ImageIO.read(new File("img/icon.png")));
                }
                catch (IOException exc) {
                    exc.printStackTrace();
                }
                                }
                 catch (Exception e) 
                {

                     JOptionPane.showMessageDialog(null,e.getClass().getName() + ": " + e.getMessage()); 
                    }

            }
        });

3 个答案:

答案 0 :(得分:2)

即使我打开另一个Jframe TabletAddDetails实例,我也只是找到了更新进度条的解决方案。现在,当我回来时,进度条更新将继续。我以一种非常简单的方式实现它。我有时间使用swingworker完成功能。以前我在相同的Jframe TabletAddDetails中实现swingworker。现在我所做的非常简单,只需在src文件夹中创建另一个类并将swingworker中的所有代码复制到它并在我按下Jframe TabletAddDetails中的buttion时调用该类。

这里由于进度条的数据操作和更新是由另一个单独的类(即MVC中的模型)完成的,该类链接到您的Jframe(MVC中的视图),所以即使你关闭并回到相同的Jframe,功能部分仍将连接到它。所以我几乎不建议在实现java swing项目时遵循MVC

答案 1 :(得分:0)

在新的jFrame中实施WindowListener并传递对父jFrame的引用。

void windowClosed(WindowEvent e) {
    parent.setVisible(true);
}

答案 2 :(得分:0)

在TabletAddDetails的构造函数中使用对Tablet的引用作为参数

        private JFrame myTablet;

        public TabletAddDetails(JFrame parent) {
                 myTablet = parent;
        }

...

        JButton btnBack = new JButton("BACK");
        btnBack.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent arg0) {
                    try {

                        myTablet.setVisible(true);
                        // Maybe you have already set this in original instance   
                        // myTablet.setLocationRelativeTo(null);
                        // myTablet.setResizable(false);
                        // myTablet.setTitle("Tablet"); 
                        setVisible(false);

...