Java 你将如何关闭jpanel?
我有以下代码:Java 你将如何关闭jpanel?,java,swing,Java,Swing,我有以下代码: public static void main(String[] args) throws MalformedURLException { // ask player for his username, this is used for login. Random rand = new Random(); int r = rand.nextInt(1000 - 1) + 1; Object[] options1 = {"Login", "Ran
public static void main(String[] args) throws MalformedURLException {
// ask player for his username, this is used for login.
Random rand = new Random();
int r = rand.nextInt(1000 - 1) + 1;
Object[] options1 = {"Login", "Random Username",
"Quit"};
JPanel panel = new JPanel();
panel.add(new JLabel("Enter your desired username:"));
JTextField textField = new JTextField(16);
panel.add(textField);
//random usernames
String words = "username:noob:player:slayer:foreveruser:forevernoob:foreverplayer:lol:wrectlikeaboos:darkalien:gold_in_silver:zeebra:zebra:maddox:canada:canadian:richtard";
String[] wordsAsArray = words.split(":");
int index = new Random().nextInt(wordsAsArray.length);
String randomWord = wordsAsArray[index];
Random num = new Random();
int numr = num.nextInt(1000 - 1) + 1;
int result = JOptionPane.showOptionDialog(null, panel, "Forever: Login",
JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE,
null, options1, null);
if (result == JOptionPane.YES_OPTION) {
JOptionPane.showMessageDialog(null, "Logged in as " + textField.getText());
}
//randomusername = no
//quit = cancel
if (result == JOptionPane.CANCEL_OPTION) {
System.exit(1)
}
if (result == JOptionPane.NO_OPTION) {
JOptionPane.showMessageDialog(null, "Logged in as " + randomWord + numr);
}
//String user = JOptionPane.showInputDialog("Enter your username: ", "User"+r);
Login client = new Login("hi");
}
public Login(String userName) throws MalformedURLException {
Launcher launcher = new Launcher();
launcher.init();
this.username = userName;
}
基本上,当你运行程序时,你会得到一个弹出窗口,询问你的用户名。如果你按退出,它在没有任何用户名的情况下运行游戏(不应该发生),如果你按X,它也会运行。我如何使它只结束程序,而不是在没有任何用户名的情况下运行
谢谢。在处理按退出的操作时,您可以调用(假设您没有任何要清理或保存的操作,而这些操作不是在a中完成的)。您需要检查另一个可能的结果:
JOptionPane.CLOSED\u选项
。这适用于用户点击X或以其他方式关闭X的情况
在问题中,您说它对取消选项也不起作用,但我看到您编辑了您的问题并修复了它(您添加了System.exit(1)
)
此外,我建议用if/else语句编写,这样您只需担心您关心的操作:
String username;
if (result == JOptionPane.YES_OPTION) {
username = textField.getText();
} else if (result == JOptionPane.NO_OPTION) {
username = randomWord + numr;
} else { //Or add if's for CANCEL and CLOSED if you want to do something else
System.exit(0);
}
JOptionPane.showMessageDialog(null, "Logged in as " + username);
Login client = new Login(username);
首先,您需要了解
JOptionPane
告诉您的是什么
从
返回:
一个整数,指示用户选择的选项;如果用户关闭了对话框,则为CLOSED_选项
这可能有点不确定,但本质上,这将在用户选择的对象[]
选项的索引中返回。这意味着正常常数没有任何意义(除了关闭的\u选项
)
因此,与使用NO_选项
或CANCEL_选项
不同,您需要使用0
进行登录
,1
进行随机用户名
和2
进行退出
,例如
if (result != 2 && result != JOptionPane.CLOSED_OPTION) {
if (result == 0) {
JOptionPane.showMessageDialog(null, "Logged in as " + textField.getText());
} else {
JOptionPane.showMessageDialog(null, "Logged in as " + randomWord + numr);
}
//String user = JOptionPane.showInputDialog("Enter your username: ", "User"+r);
Login client = new Login("hi");
}
然后,如果选择了有效的响应,您还应该仅创建登录名
我是个老派,我相信程序有一个入口点和一个出口点,把你的代码乱扔到系统中。退出s只会让以后的调试更加困难-IMHO使用if-else语句…@MadProgrammer我应该在哪里使用它?我尝试过这样做,但只有当它是jframe时才有效,但事实并非如此。不知道为什么会这样:/(它来自开源2d rpg java游戏“Jeu”)。我将把它添加到退出按钮though@user3930774为什么不把你的面板添加到jframe上?@MichaelParker我该怎么做。。。?我的想法是这样做:为了一个发射器。它没有选择分辨率,而是有一个简单的用户名字段,上面有3个按钮(随机用户名、取消、登录),按X将关闭游戏(我不知道怎么做)@user3930774有点困惑,现在你有了系统,现在的问题是什么。退出(int)到位了吗?当他们按“否”时,你想让程序结束吗?如果是这样,您必须在if(result==JOptionPane.NO_OPTION)
if中添加一个System.exit(int)。好的,我这样做了,我创建了一个名为username的公共字符串,然后在它标记玩家的类中,它将其设置为username字符串+1个不错的代码示例。关于入口点和出口点,你是对的,调试变得越来越困难。谢谢你,我做了类似的事情。这是我的最终产品:(我不知道封闭式选项的存在)