Переключение 2 кнопок в методе actionPerformed - PullRequest
0 голосов
/ 14 марта 2020
import javax.swing.*;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import java.awt.event.*;
/**
 * Model is a clickable square that will be used later on in my GUI This class
 * represents a Square objects, when combined with the Board.java class,
 * Instances of the Square class can be displayed on the screen.
 */

public class Square extends JButton implements ActionListener{

        private static final long serialVersionUID = 1L;
        private ImageIcon water = new ImageIcon("Water.png");
        private ImageIcon lilypad = new ImageIcon("Lilypad.png");
        private ImageIcon greenFrog = new ImageIcon("GreenFrog.png");
        private ImageIcon redFrog = new ImageIcon("RedFrog.png");
        private ImageIcon greenFrog2 = new ImageIcon("GreenFrog2.png");
        private ImageIcon redFrog2 = new ImageIcon("RedFrog2.png");

        private JButton[][] square = new JButton[5][5];

        public Square() 
        {
            for (int i=0; i<square.length; i++)//use a for loop to add the button 25 times
            {
                for (int j=0; j<square[i].length; j++)
                {
                    square[i][j] = new JButton();
                }
            }
        }

        public JButton getSquare(int x, int y)
        {
            return square[x][y];
        }

        public void changeButton() 
        {
            try 
                {
                    Scanner sc = new Scanner(new BufferedReader((new FileReader("level1.txt"))));
                    String [][] myArray = new String [5][5];
                    while(sc.hasNextLine())
                    {
                        for (int x=0; x<myArray.length; x++)
                        {
                            String[] line = sc.nextLine().trim().split(" ");
                            for (int y=0; y<line.length; y++)
                            {
                                myArray[x][y] = line[y];

                                switch (myArray[x][y]){

                                    case "g":
                                    square[x][y].setIcon(greenFrog);
                                    square[x][y].addActionListener(this);
                                    break;

                                    case "r":
                                    square[x][y].setIcon(redFrog);
                                    break;

                                    case "l":
                                    square[x][y].setIcon(lilypad);
                                    break;

                                    case "w":
                                    square[x][y].setIcon(water);
                                    break;

                                    default:
                                    square[x][y].setIcon(water);
                                }
                            }
                        }
                    }
                } 
            catch (FileNotFoundException e) 
                {
                    e.printStackTrace();
                }
            }

            public void actionPerformed(ActionEvent c) 
            {   
                ((AbstractButton) c.getSource()).setIcon(greenFrog2);
            }
    }

Выше приведен класс, который будет считывать из файла и добавлять соответствующие изображения в массив кнопок.

Однако мне удается добавить ActionListener, который выполняет задачу выделения выбранной кнопки. .

Но мне нужно как-то заставить метод actionPerformed позволить мне переключать кнопки. например, если я нажму кнопку со свободной лягушкой на ней, она будет ярко освещена, но если я , то нажму кнопку с квадратом лилии, она должна переключить 2 кнопки, которые я создали.

Если нужно, вот мой класс доски ниже:

import javax.swing.*;
/** 
* Model is a class that will use Square.java to build a Graphical User Interface(GUI)
*/

public class Board//inherits all methods from Square class
{
    //declared all the variables to be used
    private JFrame window;
    private JPanel panel;
    private Square a = new Square();

    public Board(int width, int height, String title)
    {    
            this.window = new JFrame();
            this.window.setTitle(title);
            this.window.setSize(width, height);
            // added frame 

            panel = new JPanel();
            panel.setLayout(new GridLayout(5,5));
            // added panel

            a.changeButton();

            for (int x = 0; x < 5; x++)
            {
                for (int y =0; y < 5; y++)
                {
                    panel.add(a.getSquare(x, y));
                }
            }

            window.setContentPane(panel); //adding panel to windown frame
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //set exit on close
            window.setVisible(true); //set window frame visible
    }

    public static void main (String[] args)
    {
        Board c = new Board(750, 750, "Hopper!");
    }
}

Любая помощь будет очень признательна !!!

Это плитка .txt I прочитал в:

l w l w l
w g w g w
l w g w l
w l w l w
g w r w g
...