GUI窗口订购和删除显示问题

时间:2011-03-21 16:46:30

标签: java swing

我在同步GUI的显示方式时出现问题......

目前我有以下作为主程序

public class MainGUI extends JPanel{

private static final long serialVersionUID = 1L;

public static void main(String[] args) throws Exception {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                JFrame f = new JFrame("Firstscreen_Main");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Firstscreen_Main gp = new Firstscreen_Main();
                // rest code
                f.setVisible(true);
            }
        });
    }
}

其中Firstscreen_Main是类似

的类
public class Firstscreen_Main extends JPanel implements ActionListener, ChangeListener       
{
   // code
}

在此之后,我在上面的类中有一个按钮,其中有一个监听器,它提供了一个用户输入的对话框....

为此我在侦听器处理中添加了Firstscreen_Main代码

this.removeAll();
SecondScreen second = new SecondScreen();

这不会删除第一个屏幕的内容......

这可能是因为对话框应该显示它来自(unsure ? )

的上一个屏幕

但是如何完全销毁第一个窗口并使用存储的数据启动下一个窗口?

我想我不了解窗户的工作方式......任何人都可以解释......

我已经了解了CardLayout,但是有什么简单的方法可以从第一个屏幕中移除所有内容并制作出新的内容吗?

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

this.removeAll(); // Remove everything from the frame
SecondScreen second = new SecondScreen(); // Create the panel
this.add(second); // Add the panel to the frame
second.revalidate();
this.repaint();

答案 1 :(得分:1)

  1. 您需要在不在面板上的框架上调用dispose。
  2. 您的MainGUI类不应该是JPanel,而是创建和控制应用程序中的帧。
  3. 您的课程不应按其出现的顺序命名。如果您决定更改订单,您也不希望更改名称。类名也不应该包含下划线。
  4. 看起来你的班级有很多责任。尝试将你的课程分解成更有意义的chucks。同时尝试减少类之间的耦合。
  5. 总的来说,我认为移动对正在显示的屏幕的控制需要移动到一个单独的类,而不是让每个JPanel打开和关闭帧。

答案 2 :(得分:0)

尝试使用this.dispose();

处理第一个屏幕

让我知道它是否有效。

此致