簡體   English   中英

向許多JButton添加ActionEvent

[英]Adding ActionEvent to many JButtons

我想將ActionEvent添加到81個JButton中,如何使用更少的代碼來做到這一點? 我嘗試使用循環來完成工作,但是程序本身存在問題。 這是我認為足以從中獲得答案的部分代碼。

    public void actionPerformed(ActionEvent e) {
    if(e.getSource()==tiles[0]) {
        n=0;
        x=1;
        y=1;
        detectMines();
        setProperties(n,x,y);
    }

    if(e.getSource()==tiles[1]) {
        n=1;
        x=1;
        y=2;
        detectMines();
        setProperties(n,x,y);
    }

    if(e.getSource()==tiles[2]) {
        n=2;
        x=1;
        y=3;
        detectMines();
        setProperties(n,x,y);
    }

    if(e.getSource()==tiles[3]) {
        n=3;
        x=1;
        y=4;
        detectMines();
        setProperties(n,x,y);
     }

     if(e.getSource()==tiles[4]) {
         n=4;
         x=1;
         y=5;
         detectMines();
         setProperties(n,x,y);
     }

     if(e.getSource()==tiles[5]) {
         n=5;
         x=1;
         y=6;
         detectMines();
         setProperties(n,x,y);
     }

您知道其余的內容,這是我在上面的代碼中使用的功能,也許這將有助於解決我的問題。

    public void setProperties(int n, int x, int y){
     if(grid[x][y]=="1") {
         slives--;
         Icon phpicon = new ImageIcon(getClass().getResource( "resources/"+p1hp[slives] ) );
         shp.setIcon(phpicon);
         tiles[n].setIcon(icon);    
         tiles[n].setDisabledIcon(icon);
         tiles[n].setEnabled(false);
         mines=0;       
         if(slives==0){
             message = "lose";
             sendData( message );
             JOptionPane.showMessageDialog(null,"You Have No Life Left! You Lose!");
            System.exit(0);
         }
         else{
             message = "mines";
             sendData( message );
         JOptionPane.showMessageDialog(null,"BOOOOOOOOOOM!");
         }
     }

     else if(grid[x][y]=="2") {
         clives--;
         Icon phpicon = new ImageIcon(getClass().getResource( "resources/"+p2hp[clives] ) );
         chp.setIcon(phpicon);
         tiles[n].setIcon(powerups);    
         tiles[n].setDisabledIcon(powerups);
         tiles[n].setEnabled(false);
         mines=0;
         turn--;
         message = "powerups";
         sendData( message );
         JOptionPane.showMessageDialog(null,"Powerups -HP To Enemy!");
         if(turn==0){
             message = "win";
             sendData( message );
             JOptionPane.showMessageDialog(null,"You Cleared All The Mines You Win!");
             System.exit(0);
         }
     }

     else {
     str=Integer.toString(mines);
     tiles[n].setText(str);
     UIManager.getDefaults().put("Button.disabledText",Color.BLUE);
     tiles[n].setEnabled(false);
     mines=0;
     turn--;
     if(turn==0){
         message = "win";
         sendData( message );
         JOptionPane.showMessageDialog(null,"You Cleared All The Mines You Win!");
         System.exit(0);
     }
     }
 }

對不起,密碼牆。

我希望這能幫到您:

import java.awt.Color;
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;
import javax.swing.SwingUtilities;


public class Minesweeper extends JFrame{

    JPanel panel = new JPanel();
    JButton [] button = new JButton[81];

    public Minesweeper(){
        panel.setLayout(new GridLayout(9,9));
        for(int i=0;i<81;i++){
            button[i] = new JButton(""+i);
            button[i].addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    if( e.getSource() instanceof JButton) {
                           ((JButton)e.getSource()).setBackground(Color.red);
                       }
                }
            });
            panel.add(button[i]);
        }
        add(panel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                Minesweeper m = new Minesweeper();
                m.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                m.pack();
                m.setVisible(true);
            }
        });
    }

}

在此處輸入圖片說明

這樣的事情怎么樣:

public void actionPerformed(ActionEvent e) {

    for (int i = 0; i < ??; i++) {
      if(e.getSource() == tiles[i]) {
        n=i;
        x=1;
        y=i+1;
        detectMines();
        setProperties(n,x,y);
        break;
      }
    }
}

哪里?? 被替換為您的總瓷磚數。 或按照@ brano88的建議,考慮在循環中創建按鈕,而不是使用與上面顯示的代碼相似的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM