2013-04-07 101 views
1

我用jbuttons製作了一個掃雷遊戲,我不知道如何再次訪問所有按鈕,以便在輸掉後顯示最終的遊戲。我通過使用Jbuttons中使用setText方法可以設置文本,但我不知道如何再試一次訪問它們是我創造了所有的按鈕,如果有幫助:揭示掃雷遊戲中的所有空間

for(int x = 0; x < rows ;x++) 
    { 
     for(int j = 0; j < columns; j++) 
     { 
      MineButton button = new MineButton(x,j); 
      // adds a mouselistener for every button 
      button.addMouseListener(new MouseHandler()); 
      this.add(button); 
     } 
    } 

我可以把它變成一個數組但我認爲我不能透過這些來透露他們。任何建議是受歡迎的。

+0

保持周圍Jbuttons中的數組(或作爲一個ArrayList另一種數據結構等),按照你的建議,那麼你就可以遍歷/他們枚舉做任何你想要的操作。 – Patashu 2013-04-07 23:21:47

+0

'「我可以把它變成一組jbuttons,但我不認爲我可以通過這些來揭示它們......」 - 實際上這樣做會工作並且可以很好地工作。 – 2013-04-07 23:22:08

+0

你會怎麼去初始化呢?你會在數組的每個部分創建一個新按鈕嗎? – 2013-04-07 23:25:06

回答

3

您應該創建一些數組,它將存儲對所有按鈕的引用。請參閱我的小例子,這將有助於你瞭解它是如何工作的:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class MineSweeper { 

    public static void main(String[] args) { 
     MainFrame window = new MainFrame(); 
     window.setVisible(true); 
    } 
} 

/** 
* Main frame. Initialize window and adds panel with buttons and clear button on 
* the window. 
* */ 
class MainFrame extends JFrame { 

    private static final long serialVersionUID = 1L; 

    private final Board board = new Board(10, 11); 

    public MainFrame() { 
     setLocation(400, 400); 
     setLayout(new GridLayout(2, 1)); 
     add(board); 
     add(createClearButton()); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    private JButton createClearButton() { 
     JButton button = new JButton(); 
     button.setText("Clear"); 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       board.clear(); 
      } 
     }); 
     return button; 
    } 
} 

/*** 
* This class contains all buttons on one panel. We initialize all buttons in 
* constructor. We can use {@link Board#clear()} method for reveal all buttons. 
* */ 
class Board extends JPanel { 

    private static final long serialVersionUID = 1L; 

    private JButton[][] plate; 
    private int numberOfRows; 
    private int numberOfColumns; 

    public Board(int numberOfRows, int numberOfColumns) { 
     this.numberOfRows = numberOfRows; 
     this.numberOfColumns = numberOfColumns; 
     this.plate = new JButton[numberOfColumns][numberOfRows]; 
     setLayout(new GridLayout(numberOfRows, numberOfColumns)); 
     init(); 
    } 

    private void init() { 
     for (int x = 0; x < numberOfColumns; x++) { 
      for (int y = 0; y < numberOfRows; y++) { 
       JButton button = createNewJButton(x, y); 
       plate[x][y] = button; 
       add(button); 
      } 
     } 
    } 

    private JButton createNewJButton(int x, int y) { 
     JButton button = new JButton(); 
     button.setText(x + ", " + y); 
     button.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       JButton button = (JButton) e.getSource(); 
       button.setText("X"); 
      } 
     }); 
     return button; 
    } 

    public void clear() { 
     for (int x = 0; x < numberOfColumns; x++) { 
      for (int y = 0; y < numberOfRows; y++) { 
       plate[x][y].setText(x + ", " + y); 
      } 
     } 
    } 
} 
+1

謝謝你的回答! – 2013-04-08 01:16:28

+1

@Hovercraft全食鰻魚,好點。謝謝你的建議。我改變了它。新名稱 - MainFrame。 – 2013-04-08 19:10:58