【问题标题】:Swing navigation - basicSwing 导航 - 基本
【发布时间】:2012-10-09 19:54:18
【问题描述】:

我刚开始使用 Swing。我开始掌握它了。

但是我有一个关于摇摆屏幕导航的问题。

这就是我构建应用程序的方式。

  • 公共类 MainFrame 扩展 JFrame
  • 公共类 LoginPanel 扩展 JPanel
  • 公共类 HomeScreenPanel 扩展了 JPanel

在大型机中我有以下代码:

public class MainFrame extends JFrame {

    public MainFrame() {
        initUI();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MainFrame ex = new MainFrame();
                ex.setVisible(true);
            }
        });
    }

    private void initUI(){
        InputScreenPanel inputScreenPanel = new InputScreenPanel();
        getContentPane().add(inputScreenPanel);
        Dimension dim = new Dimension(400, 300);
        setMinimumSize(dim);
    }
}

在 LoginPanel 中,我初始化屏幕并添加一个按钮和一个文本框。我为按钮单击事件编写了事件处理程序。我想从文本框中获取值并将用户重定向到 HomeScreenPanel。当此按钮单击正在执行上下文是 LoginPanel 并且我没有对框架的引用时,我如何切换面板,因此我可以切换面板。

【问题讨论】:

  • 我认为,首先你必须在开始编码之前设计程序。为此,您可以尝试实现 MVC 模式。
  • 您也可以选择CardLayout,然后在面板之间切换

标签: java swing


【解决方案1】:

我认为你有两个选择:

  1. 您可以在创建 InputScreenPanel 时将 MainFrame 对象作为参数传递。你应该问问自己,你的 InputScreenPanel 知道你的 MainFrame 是否有意义。在某些情况下可能会,但根据您的示例,我会拒绝并选择第二个选项。
  2. 您可以为您的 InputScreenPanel 创建某种事件处理程序结构(或者如果您使用的是模型-视图-控制器设计,则可以创建它后面的任何模型结构)。用户将登录,这将创建一个事件,MainFrame(或其他类)可以响应。

【讨论】:

  • 第一个选项确实是设计缺陷
  • 对于任何专业应用,是的。尽管如此,这是一种可能性,所以我提到了它。 MVC 是几乎在所有场景中的最佳选择。
  • 只是一个简单的问题,因为我的一位同事说我应该处理框架并为每个新面板创建一个新的.. 我觉得这是不正确的。我说的对吗?
【解决方案2】:

您应该使用 JDialog 作为登录部分,然后在新的 JFrame 中启动您的应用

【讨论】:

    【解决方案3】:

    我会使用某种模型/控制器,它能够对程序各个部分的变化做出反应。

    我会连接这个控制器,这样你就可以在不影响应用程序的其余部分的情况下替换实现

    基本上这意味着登录窗格和主窗格不会关心它们的显示方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多