与父 JPanel 通信

我正在使用 Swing 和 MVC 设计模式创建一个 Java 应用程序。

该应用程序设计如下:

  • 有一个类QuizPanel扩展JPanel. 此面板是包含我的应用程序的主要“屏幕”的容器。

  • 我的应用程序的每个“屏幕”都是一个单独的类,扩展JPanelQuizPanel根据需要添加/删除这些 JPanel 。

  • 顶层QuizPanel实现了我的接口Switchable。该Switchable接口由单个SwitchView(ViewState state)方法组成。我传递this给在QuizPanel顶级面板中实例化的每个“屏幕” ,因此它们能够在SwitchView按下按钮时进行调用。

在登录屏幕上,用户输入 pin 和学生 ID,如果它们与数据库中的令牌匹配,我需要将Token对象传递到我的应用程序的另一个屏幕(我尚未实现的问题屏幕)或拥有它以某种方式可用。从嵌入式 Derby 数据库中检索令牌。

我能想到的唯一方法是创建一个带有静态Token变量的实用程序类,其他类可以访问它(这似乎是一种讨厌的方法)。我是否因为我的应用程序的设计有缺陷而遇到了这个问题?有没有什么技术可以用来Token在我的应用程序的不同屏幕上传递?

主要的


public static void main(String[] args) {

    QuizPanel quizPanel = new QuizPanel();


    JFrame frame = new JFrame("Quiz");

    frame.setPreferredSize(new Dimension(400, 400));

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.add(quizPanel);

    frame.pack();

    frame.setLocationRelativeTo(null);


    frame.setVisible(true);

}


侃侃无极
浏览 176回答 2
2回答

繁星淼淼

我认为在这种情况下您可以使用Singleton 模式。这种模式应该尽可能少地使用,但在你的情况下(必须从不同类别的应用程序访问的公共信息)你可以使用它(恕我直言)。但在您的情况下,您也可以使用一种 Swing 功能。任何 Swing 窗口都有一个根窗格。JComponent窗口中的每个布局都可以访问此窗格。JComponent还可以在地图中存储一些用户数据,称为“客户端属性”。因为JRootPane扩展JComponent 你可以存储/检索你的令牌是这张地图。这是一个简单的代码:public class TokenUtils {    private static final String TOKEN_PROPERTY = "token";    public static Token findToken(JComponent component) {        JRootPane root = component.getRootPane();        if (root != null) {            return Token.class.cast(root.getClientProperty(TOKEN_PROPERTY));        }       return null;    }    public static void putToken(JComponent component, Token token) {        JRootPane root = component.getRootPane();        if (root != null) {            root.putClientProperty(TOKEN_PROPERTY, token);        }    }}重要提示:如果您使用多个窗口,则必须将令牌放入每个窗口中。

月关宝盒

将令牌的值传递给父 JPanel 的方法是在您的界面中添加一个方法,如 setToken(int token) 和测验面板中的全局变量测验面板:private int token;@Overridepublic void setToken(int token){     this.token = token;}切换界面:public void setToken(int token);登录:parentView.setToken(token);比您parentView.setToken(token)在 LoginController 中说的要多。现在将设置 QuizPanel 中的令牌变量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java