2013-09-23 63 views
2
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 

public class Concentration extends JFrame implements ActionListener { 

    private JButton buttons[][]=new JButton[4][4]; 
    int i,j,n;  

    public Concentration() {    
     super ("Concentration");  
     JFrame frame=new JFrame(); 
     setSize(1000,1000); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel=new JPanel(new GridLayout(4,4)); 
     panel.setSize(400, 400);    
     for(i=0; i<buttons.length; i++){ 
      for (j=0; j<buttons[i].length;j++){ 
       n=i*buttons.length+buttons[i].length; 
       buttons[i][j]=new JButton();      
       panel.add(buttons[i][j]); 
       buttons[i][j].addActionListener(this); 
      } 
     } 
     add(panel); 
     pack(); 
     setVisible(true);  
    } 

    public void actionPerformed(ActionEvent e) {    
     buttons[i][j].setIcon(new ImageIcon(
       getClass().getResource("/images/2.jpg"))); 
    } 

    public static void main(String args[]){ 
     new Concentration(); 
    }  
} 

這是我的代碼。我正在製作記憶遊戲。我要作出這樣的,每次點擊一個按鈕,該按鈕顯示圖像,但Addactionlistener不參數

buttons[i][j].addActionListener(this); 

,methot不能把i和j和亙古不顯示任何圖像。

但例如當我這樣做

buttons[2][2].addActionListener(this); 

它只顯示在2×2。圖片。我能做些什麼來解決這個問題?

回答

3

可能的解決方案:

  • 裏面的ActionListener,遍歷的按鈕配置,看看哪一個JButton陣列中的匹配被按下的按鈕,獲得通過調用e.getSource()
  • 給你Jbutton將actionCommand字符串對應到i和j
  • 創建一個單獨的ActionListener實現類,該類具有可以通過構造函數設置的i和j字段,併爲每個按鈕設置一個唯一的帶有i和j集的ActionListener。
2

試試這個代碼:

public void actionPerformed(ActionEvent e) { 
    if(e.getSource() instanceof JButton){ 
     JButton pressedButton = (JButton) e.getSource(); 
     if(pressedButton.getIcon() == null){ 
      pressedButton.setIcon(new ImageIcon(getClass().getResource("/images/2.jpg"))); 
     } else { 
      pressedButton.setIcon(null); 
     } 
    } 
} 

直接形式EventObject的javadoc:

public Object getSource()

上最初發生Event的對象。

返回: 事件最初發生的對象。

這意味着沒有必要知道按下按鈕的數組索引,因爲它可以通過getSource()方法知道。

+1

@downvoter請解釋一下。 – dic19

+1

@nIcEcOw我有+1(認爲是你的,謝謝),但另一個-1我想知道爲什麼。 – dic19

+1

你有一個1+。在解釋中顯示getSource()方法是很好的。謝謝。 –

相關問題