【问题标题】:jumping between menus in java在java中的菜单之间跳转
【发布时间】:2012-12-05 08:41:13
【问题描述】:

我已经用 Java 开发命令行程序有一段时间了,并且正在研究实现 GUI 解决方案的方法。我是新手,所以任何帮助都会非常有帮助。提前致谢。 我最近问了另一个关于按钮的问题,但我现在有另一个问题。

我一直在从一本书中学习如何使用动作侦听器来执行基于按钮的动作。然而,在书中,按钮只是简单地调用了一个产生文本输出的方法。

我需要一种方法来允许用户按下一个按钮,该按钮将他/她带到一个具有不同按钮/选项的新窗口,如果用户希望他们可以按下另一个按钮返回上一个窗口。如果有人可以向我展示一个框架解决方案,并在下面解释我的示例:

用户会看到两个按钮,“图书馆菜单”和“帐户菜单” 如果用户按下“图书馆菜单”,他们将被带到一个窗口,其中包含添加书籍、删除书籍等选项,最后一个按钮返回主屏幕。 如果用户按下“帐户菜单”,他们会看到一个新窗口/菜单,其中包含添加、删除、重命名等按钮,以及返回主屏幕/主菜单的最终按钮。

使用命令行很简单,因为选择库会调用库类中的方法。该方法将有一个 switch case,它根据用户输入调用不同的方法,例如当用户输入“e”时,switch case 可以选择从方法中返回,即 return 语句将用户返回到该方法最初调用它(在主屏幕中)。

我非常感谢任何有关这方面的帮助/建议/信息!!!!

【问题讨论】:

    标签: java swing user-interface frames


    【解决方案1】:

    通常不建议向用户呈现多个窗口或框架,这会很快变得混乱和烦人。

    一般来说,如果您想切换视图,您应该使用CardLayout,这将允许您更改用户主显示屏上的内容。

    您还可以使用JTabbedPane,它允许用户在不同的视图之间随意移动

    【讨论】:

      【解决方案2】:

      您可以为每个“窗口”制作一个 JPanel,然后在 JFrame 中切换它。要拥有相同的设计(将来可以更改),您需要某种建模:添加按钮的生成步骤等。

      使用 Action-s (AbstractAction) 有助于解耦,在 Model-View-Controller 中分离所有内容。

      真正的应用程序可能是一个主要的 JFrame,可能会调用一些 JFrame,当然是 @MadProgrammer 提出的想法。您的 JPanel 可以插入,无论是在 JTabbedPane、JInternalFrame 还是其他任何地方。

      制作提供 JPanel 的 MVC 类,管理操作。

      【讨论】:

        【解决方案3】:

        既然你知道actionListener,你可能知道如何创建一个JFrame,看起来你的逻辑是OK的。如果我错了,请纠正我,你只需要一个 ActionListener 的骨架?
        对于按钮的 mouseListener,这应该可以正常工作:

        JButton btnExit = new JButton("Exit"); // Creating the button
        
        btnExit.addMouseListener( new MouseAdapter() { // Adding a mouseListener to your component
            // Mouse is pressed in this component
            @Override
            public void mousePressed( MouseEvent e ){
                yourFrame.dispose() // Closes your JFrame
            }
        });
        

        【讨论】:

          【解决方案4】:

          您可能希望先创建所有窗口(新窗口),然后仅在单击按钮时显示它们,这样您就不会拥有同一窗口的多个实例。

          public MainWindow extends JFrame
          {
              private LibraryWindow libWin;
              private AccountsWindow accWin;
          
              public MainWindow()
              {
                  libWin = new LibraryWindow();
                  libWin.setParent(this);
                  accWin = new AccountsWindow();
                  accWin.setParent(this);
          
                  ...
          
                  this.show();
              }
          
              btnLib.addMouseListener( new MouseAdapter() { // Adding a mouseListener to your component
              // Mouse is pressed in this component
              @Override
              public void mousePressed( MouseEvent e ){
                  libWin.show(); //shows your window on top of the main window
          
                  //if you want to switch windows you can hide the parent
                  this.hide();
              }
          });
          
          
          public LibraryWindow extends JFrame
          {
          
          
              public LibraryWindow()
              {
                  //create/design the window
          
                  ...
          
                  //don't show the window, the main window will do that
              }
          
              btnExit.addMouseListener( new MouseAdapter() { // Adding a mouseListener to your component
              // Mouse is pressed in this component
              @Override
              public void mousePressed( MouseEvent e ){
          
                  //if you want to switch windows you can show the parent
                  this.parent.show();
          
                  this.hide(); //only hide the window in order to reuse it
                  //restore the window to its initial state
              }
          });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-07
            • 1970-01-01
            • 1970-01-01
            • 2010-10-21
            • 2014-08-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多