How do I close a JOptionPane once a button is clicked?

Tags: ,



I’ve seen other solutions using yes-no-cancel options but I am using an array of three options for the user to choose from as a sort of pre-launch menu for my app.
I’m sorry if my code is awful to look at, I’m still new to this.

I want to close the JOptionPane.showOptionDialog() once any of these three buttons are clicked. Not sure if Java has a method for this but if there is, I haven’t been able to find it. Thanks in advance!

static void startMenu() {
  JButton btnThreeByThree = new JButton("Easy 3x3");
  JButton btnFiveByFive = new JButton("Meduim 5x5");
  JButton btnTenByTen = new JButton("Hard 10x10");

  btnThreeByThree.addMouseListener(new MouseAdapter(){
     @Override
     public void mouseClicked(MouseEvent e) {
        GameFrame myFrame = new View.GameFrame(3, 3);
        myFrame.setVisible(true);
     }
  }); 

  btnFiveByFive.addMouseListener(new MouseAdapter(){
     @Override
     public void mouseClicked(MouseEvent e) {
        GameFrame myFrame = new View.GameFrame(5, 5);
        myFrame.setVisible(true);
     }
  }); 

  btnTenByTen.addMouseListener(new MouseAdapter(){
     @Override
     public void mouseClicked(MouseEvent e) {
        GameFrame myFrame = new View.GameFrame(10, 10);
        myFrame.setVisible(true);
     }
  }); 
  

  Object[] options = {btnThreeByThree, btnFiveByFive, btnTenByTen};

  JOptionPane.showOptionDialog(null, "Select a size to play", "Starting game...",
        JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
        null, options, options[0]);
  
}

Answer

Object[] options = {btnThreeByThree, btnFiveByFive, btnTenByTen}; 

You don’t create buttons as the options.

Instead you just pass the text and the option pane will create the buttons.

Object[] options = {"Easy 3x3", "Medium 5x5", "Hard 10x10"};

Then you need to test the int value returned from the ShopwOptionDialog() method to invoke your processing:

int result = JOptionPane.showOptionDialog(null, "Select a size to play", "Starting game...", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);

switch (result)
{
    case 0: 
        GameFrame myFrame = new View.GameFrame(3, 3);
        myFrame.setVisible(true);
        return;
    case 1: 
        ...
}

Read the section from the Swing tutorial on Customize Button Text for an example.



Source: stackoverflow