2016-01-24 3 views
1

люди в Интернете.Java - Закрыть окно на мероприятии

Я хочу, чтобы у вас был начальный экран для игры, которую я писал. До сих пор он оснащен 4 кнопками для каждого из 4 игроков, которые меняют цвет при нажатии от красного до зеленого и наоборот представляют свой индивидуальный «готовый» статус, если это имеет смысл. Я использовал JFrame и JButtons.

Теперь я хочу, чтобы это окно закрывалось, если каждая из этих кнопок в настоящее время установлена ​​на «готовую», ака кнопку button.getBackground() == Color.GREEN.

Любые предложения относительно того, какие EventListeners использовать для этого/рекомендации по внедрению/фрагменты кода были бы очень благодарны, поскольку мое исследование Windowclosing on Event не принесло мне многого.

Спасибо заранее и приветствую.

ответ

1

Поскольку вы ждете и действуете на нажатия кнопок, самым логичным слушателем будет ActionListener.

Рассмотрите возможность создания кнопок JToggleButtons, а затем в вашем слушателе, запрашивающих каждую кнопку, чтобы увидеть, выбрано ли оно (isSelected()), и если да, запустите свою программу. В качестве бокового бита я бы подумал о том, чтобы сделать окно ввода JDialog, а не JFrame, либо это, либо сделать его JPanel, и поменять его с помощью CardLayout, когда это необходимо.

Например:

import java.awt.Color; 
import java.awt.Dialog.ModalityType; 
import java.awt.Dimension; 
import java.awt.Window; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.*; 

public class AreWeReady extends JPanel { 
    List<AbstractButton> buttons = new ArrayList<>(); 
    private int userCount; 

    public AreWeReady(int userCount) { 
     this.userCount = userCount; 
     ButtonListener buttonListener = new ButtonListener(); 
     for (int i = 0; i < userCount; i++) { 
      JButton btn = new JButton("User " + (i + 1)); 
      buttons.add(btn); 
      btn.addActionListener(buttonListener); 
      add(btn); 
     } 
    } 

    private class ButtonListener implements ActionListener { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      AbstractButton btn = (AbstractButton) e.getSource(); 
      Color c = Color.GREEN.equals(btn.getBackground()) ? null : Color.GREEN; 
      btn.setBackground(c); 

      for (AbstractButton button : buttons) { 
       if (!Color.GREEN.equals(button.getBackground())) { 
        // if any button does not have a green background 
        return; // leave this method 
       } 
      } 

      // otherwise if all are green, we're here 
      Window win = SwingUtilities.getWindowAncestor(btn); 
      win.dispose(); 
      // else launch your gui 
     } 
    } 

    private static void createAndShowGui() { 
     int userCount = 4; 
     AreWeReady areWeReadyPanel = new AreWeReady(userCount); 

     JFrame frame = new JFrame("Main Application"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(Box.createRigidArea(new Dimension(400, 300))); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 

     JDialog dialog = new JDialog(frame, "Are We Ready?", ModalityType.APPLICATION_MODAL); 
     dialog.add(areWeReadyPanel); 
     dialog.pack(); 
     dialog.setLocationByPlatform(true); 
     dialog.setVisible(true); 

     // this is only reached when the modal dialog above is no longer visible 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGui(); 
      } 
     }); 
    } 
} 
+0

Привет, спасибо за ответ. Я считал ToggleButtons для изменения цвета, но JButton работал так же хорошо, поэтому я считал, что просто придерживаюсь стандарта. Я считаю, что метод isSelected() может быть заменен getBackground(). Не могли бы вы дать мне совет для такого запроса, который управляет 4 кнопками одновременно? Это то, к чему я пришел для меня. Еще раз спасибо :) –

+0

@FelixEl: итерация через 'List ' проверка состояния каждой кнопки. Например, см. Выше. –

Смежные вопросы