我正在开发此MainWindows类,该类扩展了SingleFrameApplication抽象类,该抽象类自动提供JFrame
当执行main()方法时,它将检查用户是否已登录,如果用户未登录,则首先显示由LoginFrame类实现的另一个JFrame窗口。用户在此处输入用户名和密码,然后可以登录并返回我的MainWindows(如果可以的话)。
此时,此MainWindows类仅包含一个LogOut按钮,并且此按钮上的click事件由AbstractAction内部类中定义的actionPerformed方法处理。我希望单击此按钮时,必须将此MainWindows设置为不可见,并在其位置显示LoginFrame窗口。
问题是,从这里开始,似乎不可能将此MainWindows设置为不可见。 Eclipse在这条线上给我一个错误:
mainFrame.setVisible(false);
package com.test.login;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import org.jdesktop.application.SingleFrameApplication;
public class MainWindows extends SingleFrameApplication {
private static final int FIXED_WIDTH = 880;
private static final Dimension INITAL_SIZE = new Dimension(FIXED_WIDTH, 440);
private final Action actionLogOut = new AbstractAction() {
{
putValue(Action.NAME, ("LogOut"));
}
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("logOutButton clicked !!!");
String[] args = null;
launch(LoginFrame.class, args);
mainFrame.setVisible(false);
}
};
// First execute the LoginFrame class to open the login windows:
public static void main(String[] args) {
System.out.println("Inside: MainWindows() ---> main()");
if(!(args.length > 0 && args[0].equals("loggedIn"))){
launch(LoginFrame.class, args);
}
}
@Override
protected void startup() {
// TODO Auto-generated method stub
System.out.println("Inside MainWindows ---> startup()");
JFrame mainFrame = this.getMainFrame(); // main JFrame that represents the Windows
mainFrame.setTitle("My Appliction MainFrame");
mainFrame.setPreferredSize(INITAL_SIZE);
mainFrame.setResizable(false);
mainFrame.add(new JButton(actionLogOut));
//mainFrame.add(new JButton("LogOut"));
show(mainFrame);
}
}
有人可以帮我吗?
特纳克斯
安德里亚
最佳答案
要从ActionListener访问当前框架,请使用通用代码,您无需访问类变量。就像是:
publc void actionPerformed(ActionEvent e)
{
JButton button = (JButton)e.getSource();
Window window = SwingUtilities.windowForComponent(button);
window.setVisible(false);
}