我一直在用Java开发命令行程序一段时间,正在研究实现GUI解决方案的方法。我是新手,所以任何帮助都会非常有帮助。提前致谢。 我最近问过另一个关于按钮的问题,但我现在有了另一个问题。
我从一本书中学习如何使用动作监听器来执行基于按钮的动作。但是,在本书中,按钮简单地称为生成文本输出的方法。
我需要一种方法来允许用户按下一个按钮,将他/她带到具有不同按钮/选项的新窗口,如果用户希望他们可以按另一个按钮返回到上一个窗口。如果有人可以向我展示一个骨架解决方案,并为下面的示例提供解释:
用户会看到两个按钮,“库菜单”和“帐户菜单” 如果用户按下“库菜单”,则他们将被带到一个窗口,其中包含添加书籍,删除书籍等选项以及最终按钮以返回主屏幕。 如果用户按下“帐户菜单”,则会显示一个新窗口/菜单,其中包含添加,删除,重命名等按钮,并再次返回最终按钮以返回主屏幕/主菜单。
使用命令行这很简单,因为选择库会调用库类中的方法。该方法将有一个切换案例,根据用户输入调用不同的方法,当用户输入'e'时,例如switch case有一个返回方法的选项,即return语句将用户带回到方法最初叫它(在主屏幕上)。
我非常感谢有关此的任何帮助/建议/信息!!!!
答案 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
}
});