2014-04-10 43 views
-1

我想製作一個java GUI程序「遊戲」。切換按鈕標題遊戲

有五個按鈕,每個按鈕都有一個字符作爲按鈕標題。當點擊一個按鈕時,該按鈕的標題與右邊的鄰居交換。如果最右邊的按鈕被點擊,那麼最左邊的按鈕有這個標題,所以它們都會切換(它包裹着)。

目標是讓他們按字母順序排列,從而結束遊戲。

我想不出一個直觀的方式來讓字符切換而不必製作五個按鈕。

String str = "abcde"; // DEBUG ARGUMENT STRING 
setCaptions(str); 

方法來獲取字符串,創建一個字符數組了他們,並創建按鈕...

void setCaptions(String string){ 
    char[] charArray = string.toCharArray(); 
    ArrayList<Character> arrList = new ArrayList<Character>(); 

    for (int x=0; x < charArray.length; x++) { 
     String str = Character.toString(charArray[x]); 
     btn = new JButton(str); 
     btn.setFont(myFont); 
     pane.add(btn, "LR"); 
     btn.addActionListener(new SwitchAction()); 
     arrList.add(str.charAt(0)); 
    } 


    // check the order... 
    System.out.print(arrList); 
    if (arrList.get(0) < arrList.get(1) 
      && arrList.get(1) < arrList.get(2) 
      && arrList.get(2) < arrList.get(3) 
      && arrList.get(3) < arrList.get(4)) { 
     lbl.setText("SOLVED"); 
    } 
} 

的ActionListener切換字幕,我想不通...

public class SwitchAction implements ActionListener { 

    public void actionPerformed(ActionEvent evt) { 
     String a = btn.getText(); 

     System.out.println(evt.getActionCommand() + " pressed"); // debug 

     // something goes here... 
    } 
} 

回答

2

你應該有一個JButton的數組或列表,ArrayList<JButton>並把你的按鈕放到這個列表中。

您的ActionListener將需要對原始類的引用,以便它可以獲得ArrayList的保留。然後它可以遍歷數組列表,找出哪個按鈕被按下,哪個按鈕是它的鄰居,並進行交換。因此,通過構造函數參數傳遞該引用,然後在actionPerformed方法中,調用getList()或類似的「getter」方法來獲取ArrayList並遍歷它。

public class MyListener implements ActionListener { 
    private OriginalGui gui; 

    public MyListener(OriginalGui gui) { 
    this.gui = gui; 
    } 

    public void actionPerformed(ActionEvent e) { 
    JButton pressedButton = (JButton) e.getSource(); 
    ArrayList<JButton> buttonList = gui.getButtonList(); 

    // ... iterate through list and find button. 
    } 
}