0

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

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

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

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

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

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

4

4 回答 4

2

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

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

您还可以使用JTabbedPane,它允许用户根据需要在不同的视图之间移动

于 2012-12-05T08:50:35.353 回答
1

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

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

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

使 MVC-Classes 提供 JPanel,管理 Actions。

于 2012-12-05T08:55:46.407 回答
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
    }
});

于 2012-12-05T08:50:03.517 回答
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
    }
});
于 2012-12-05T09:07:35.683 回答