【问题标题】:How to open a hidden jframe from another jframe by clicking a button如何通过单击按钮从另一个 jframe 打开隐藏的 jframe
【发布时间】:2016-03-17 16:03:28
【问题描述】:

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

这是Jframe TabletAddDetails中返回按钮的代码

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中Button 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()); 
                    }

            }
        });

【问题讨论】:

    标签: java swing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在您的新 jFrame 中实现 WindowListener 并将引用传递给父 jFrame。

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

      【讨论】:

        【解决方案3】:

        在 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);
        

        ...

        【讨论】:

        • ?该代码完全符合您的要求。我不知道你的意思。也许它不适用于您的应用程序的其余部分。
        猜你喜欢
        • 2013-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 2013-12-05
        相关资源
        最近更新 更多