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个不错的代码示例。关于入口点和出口点,你是对的,调试变得越来越困难。谢谢你,我做了类似的事情。这是我的最终产品:(我不知道封闭式选项的存在)