JavaSwing:如何在显示JFrame之前实现登录屏幕?
我正在尝试制作一个小游戏,首先向玩家显示一个简单的登录屏幕,在那里他们可以输入自己的名字(我稍后需要它来存储他们的游戏状态信息),让他们选择难度等级等,并且只在玩家点击play按钮后显示游戏主屏幕。我还想让玩家导航到一个(对他们来说,希望是相当大的)奖杯集合,同样在他们看来是一个新的屏幕 到目前为止,我有一个带有网格布局的主游戏窗口,其中有一个可以运行的游戏(对我来说太棒了!)。现在我想添加上述功能 我该怎么做呢?我不想走多个JFrame路线,因为我一次只想在任务栏上看到一个图标(或者将它们的可见性设置为false也会影响图标吗?),我会制作和销毁布局或面板之类的东西吗JavaSwing:如何在显示JFrame之前实现登录屏幕?,java,swing,user-interface,login,jframe,Java,Swing,User Interface,Login,Jframe,我正在尝试制作一个小游戏,首先向玩家显示一个简单的登录屏幕,在那里他们可以输入自己的名字(我稍后需要它来存储他们的游戏状态信息),让他们选择难度等级等,并且只在玩家点击play按钮后显示游戏主屏幕。我还想让玩家导航到一个(对他们来说,希望是相当大的)奖杯集合,同样在他们看来是一个新的屏幕 到目前为止,我有一个带有网格布局的主游戏窗口,其中有一个可以运行的游戏(对我来说太棒了!)。现在我想添加上述功能 我该怎么做呢?我不想走多个JFrame路线,因为我一次只想在任务栏上看到一个图标(或者将它们的可
我有什么选择?如何控制显示的内容?特别是考虑到我的新手技能?一个简单的模态对话框,比如JDialog,在这里应该可以很好地工作。调用对话框时,可能是JFrame的主GUI可以不可见,然后在对话框完成后设置为可见(假设登录成功)。如果对话框是模态的,您将确切地知道用户何时关闭了对话框,因为代码将在您在对话框上调用setVisible(true)的行之后继续。请注意,JDialog所拥有的GUI可以和JFrame所拥有的GUI一样复杂和丰富 另一个选项是使用一个GUI/JFrame,但通过CardLayout在主GUI中交换视图(JPanel)。这可以很好地工作,并且易于实现。更多信息,请查看
哦,欢迎来到stackoverflow.com 您可以将内容添加到
JPanel
(我们称之为GamePanel
)并将此面板添加到框架中,而不是直接将游戏添加到JFrame
。对登录屏幕执行相同的操作:将所有内容添加到JPanel
(LoginPanel
)并将其添加到框架中。游戏开始时,您应执行以下操作:
LoginPanel
添加到框架GamePanel
并销毁LoginPanel
(因为重新创建新的会非常快,所以您不需要保留内存)下面是@HovercraftFullOfEels建议的登录对话框示例 用户名:
stackoverflow
密码:stackoverflow
我建议您插入以下代码:
JFrame f = new JFrame();
JTextField text = new JTextField(15); //the 15 sets the size of the text field
JPanel p = new JPanel();
JButton b = new JButton("Login");
f.add(p); //so you can add more stuff to the JFrame
f.setSize(250,150);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
当你想把东西添加进去时,插入它。接下来,我们将向JPanel添加所有内容:
p.add(text);
p.add(b);
现在,我们添加ActionListeners以使JButtons正常工作:
b.addActionListener(this);
public void actionPerforemed(ActionEvent e)
{
//Get the text of the JTextField
String TEXT = text.getText();
}
如果尚未导入,请不要忘记导入以下内容:
import java.awt.event*;
import java.awt.*; //Just in case we need it
import java.x.swing.*;
我希望我所说的一切都是有意义的,因为有时我(特别是当我谈论编码/Java时)并不是所有的导入(如果您不知道)都放在代码的顶部。将所有内容保存在JFrame中比创建复杂的JDialog更容易。另外,当您在奖杯/游戏/菜单之间切换时,您将能够重用面板更改代码。。一切取决于实施;)是的,但我认为他想要一个相当复杂的登录屏幕——我认为在JFrame中这样做更干净。“在JFrame中保存所有内容比创建复杂的JDialog更容易”JDialog的复杂之处是什么?另一个答案中建议的
CardLayout
是在单个容器中交换组件的更好(IMO)方法。CPU周期可能很便宜,但RAM也很便宜。getText()
方法已被弃用且不安全。
import java.awt.event*;
import java.awt.*; //Just in case we need it
import java.x.swing.*;