所以我刚开始使用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窗口没有关闭。 有什么建议吗?
哦,顺便说一句,对不起,如果我写的工作人员不可读......答案 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
代替......