gpt4 book ai didi

java - 我无法从 AbstractAction 内部类中声明的 actionPerformed 设置不可见的 JFrame,如何解决?

转载 作者:行者123 更新时间:2023-12-01 13:51:21 25 4
gpt4 key购买 nike

我正在开发这个MainWindows类,它扩展了SingleFrameApplication抽象类,自动提供JFrame

当执行ma​​in()方法时,它会检查用户是否登录,如果用户未登录,首先显示另一个由该方法实现的JFrame窗口LoginFrame 类。在这里,用户输入其用户名和密码,然后可以登录返回到我的MainWindows(如果登录正常)。

此时这个MainWindows类只包含一个LogOut按钮,这个按钮上的点击事件由定义的actionPerformed方法处理在 AbstractAction 内部类中。我希望,当单击此按钮时,此 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);


}

}

有人可以帮助我吗?

Tnx

安德里亚

最佳答案

要从 ActionListener 访问当前帧,请使用通用代码,无需访问类变量。像这样的东西:

publc void actionPerformed(ActionEvent e)
{
JButton button = (JButton)e.getSource();
Window window = SwingUtilities.windowForComponent(button);
window.setVisible(false);
}

关于java - 我无法从 AbstractAction 内部类中声明的 actionPerformed 设置不可见的 JFrame,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com