Java - setVisible(false)不起作用

时间:2014-04-17 01:45:06

标签: java swing jframe

所以我刚开始使用JFrame和JMenuBar,我试图这样做:

主文件(窗口类是我的JFrame类):

public class main {
public static void main(String avg[]) {
    window win = new window();
    win.setVisible(true);
}
}

我的菜单类(Startwin类是另一个JFrame类):

public menu() {
JMenu main = new JMenu("File");                        

JMenuItem start = new JMenuItem("ReStart",KeyEvent.VK_R);      
    start.setActionCommand("press OK to continue");
    start.addActionListener(this);

    JMenuItem save = new JMenuItem("Save",KeyEvent.VK_S);
    save.setActionCommand("saved");
    save.addActionListener(this); 
.
.
.
  main.add(start);                                           
  main.add(save);
.
.
.
.
  @Override
public void actionPerformed(ActionEvent e) {
window w = new window();
Startwin a = new Startwin();
if (e.getActionCommand()=="press OK to continue") {
    a.setVisible(true);
    w.setVisible(false);
}
}
}

因此,当我运行它时,第一个JFrame窗口没有关闭。 有什么建议吗?

哦,顺便说一句,对不起,如果我写的工作人员不可读......

1 个答案:

答案 0 :(得分:2)

三件事......

首先...

window w = new window();
Startwin a = new Startwin();

意味着您刚刚创建了这些类的全新实例,它们与您之前创建的这些类的任何其他实例没有任何关系......

二...

e.getActionCommand()=="press OK to continue"

不是如何在Java中进行String比较,这是比较两个不同的内存引用,这意味着它们不太可能相等,相反,你应该考虑使用类似的东西......

"press OK to continue".equals(e.getActionCommand())

"press OK to continue".equalsIgnoreCase(e.getActionCommand())

如果您想要不区分大小写的匹配。

第三...

请查看Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?并考虑使用CardLayout代替......