当前位置: 首页 > 知识库问答 >
问题:

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

曾苗宣
2023-03-14

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

执行main()方法时,检查用户是否已登录,如果用户未登录,则首先显示LoginFrame类实现的另一个JFrame窗口。在这里,用户插入其用户名和密码,然后可以登录并返回到我的主窗口(如果登录正常)。

此时,这个MainWindows类只包含一个LogOut按钮,并且此按钮上的单击事件由AbstractAction内部类中定义的actionPerform方法处理。我希望,当单击此按钮时,此MainWindows必须设置为不可见,并且LoginFrame窗口出现在其位置。

问题是,从这里开始,似乎不可能将此主窗口设置为不可见。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

安德莉亚

共有1个答案

胥玮
2023-03-14

要从ActionListener访问当前帧,请使用通用代码,您不需要访问类变量。类似于:

publc void actionPerformed(ActionEvent e)
{
    JButton button = (JButton)e.getSource();
    Window window = SwingUtilities.windowForComponent(button);
    window.setVisible(false);
}
 类似资料:
  • 我正在努力学习java,但我遇到了一些问题,找到答案对我来说并不简单。我想做的任务似乎很简单。 我想添加一个标签框架。MyFrame是一个JFrame类,具有一些基本的修改,如大小、颜色等。 主代码如下所示: 我得到的结果就是我想要的:正确的结果 当我评论关于标签的最后一行时,它正在改变我的用户界面的外观。它只显示JFrame而没有我的标签。 非工作代码: 这是图形结果:不工作标签 我错过了一些基

  • 我正在尝试制作一个JFrame,其中包含一个JGroup,不可见但保持JGroup可见。我怎么才能做到这一点?提前感谢!

  • 问题内容: 我正在使用django-uniform并使用一些统一功能,我正在寻找一种直接从表单声明中添加css类的方法(对于独立窗口小部件)。 (作为奖励,这里是我可重复使用的只读家庭自制混合片段……) 目前,我唯一的方法是在通用表单模板上添加一些javascript并手动添加类。 问题答案: 我发现此片段可能是一个不错的答案: 如何将CSS类和添加到必填字段的标签 这是适应我需要的内容(未经测试

  • 我在java中有一个简单的类,它包含如下内容 为此,我尝试使用randoop生成单元测试用例,下面给出了我在这里使用的命令,我的welcomes.class文件位于/home/niteshb/downloads/randoop-4.2.6/tests.class中 在这里,执行后,我得到的错误为 有人能帮我吗,我在这里呆了很长时间,尝试了不同的事情,但没有成功…

  • 问题内容: 我试图声明一个类,如下所示 在上面的代码中,s1和byte不会编译,但是s2和byte1会编译。如果我将整个常量声明放在外部类中,则效果很好。我想念什么。有什么帮助吗? 问题答案: 阅读Java语言规范,第3版,第8.1.3节。 内部类是未显式或隐式声明为static的嵌套类。内部类不得声明静态初始化器(第8.7节)或成员接口。 这就是为什么您不能声明 new的原因 。 内部类不得声明

  • 我想生成一个带有“kid”头声明的JWT令牌。我有一个XML格式的RSA私钥来签署JWT令牌。但在我的JWT中,我找不到“kid”标题声明以及类型和alg。我该怎么做? 以下是生成JWT令牌的代码: 这是我的RSA私钥。