我正在开发此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);
}

09-11 18:52