在java中的菜单之间跳转

时间:2012-12-05 08:41:13

标签: java swing user-interface frames

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

我从一本书中学习如何使用动作监听器来执行基于按钮的动作。但是,在本书中,按钮简单地称为生成文本输出的方法。

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

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

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

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

4 个答案:

答案 0 :(得分:2)

一般不建议向用户展示多个窗口或框架,这会让人感到困惑和烦恼。

通常,如果您想切换视图,则应使用CardLayout,这样您就可以更改用户主显示屏上的内容。

你也可以使用JTabbedPane来允许用户在不同的视图之间移动

答案 1 :(得分:1)

您可以为每个“窗口”创建一个JPanel,并在JFrame中切换它。要使用相同的设计(将来可以更改),您需要进行某种建模:添加按钮的生成步骤等。

使用Action-s(AbstractAction)有助于解耦,在模型 - 视图 - 控制器中分离所有内容。

真正的应用程序可能是一个主要的JFrame,可能会调用一些JFrame,肯定是@MadProgrammer提出的想法。您的JPanels可以插入,无论是在JTabbedPane,JInternalFrame还是其他任何内容。

让MVC-Classes提供JPanel,管理动作。

答案 2 :(得分:0)

如果你知道actionListener,你可能知道如何创建一个JFrame,看起来你的逻辑是正常的。如果我错了,请纠正我,你只需要一个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
    }
});

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 } });

答案 3 :(得分:0)

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

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
    }
});