简体   繁体   中英

How to assign or initiate an integer into JButton?

package javaapplication3;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

class BattleShip2 extends JFrame implements ActionListener {
    JButton[][] array2dtop = new JButton[10][10];
    BattleShip2(String title) { //Board Display
        super(title);//show Title
        setLayout(new FlowLayout()); // button posistion
         for(int x = 0; x < array2dtop.length; x++) {
            for(int y = 0; y < array2dtop.length; y++) {
                array2dtop[x][y] = new JButton(String.valueOf((x * 10) + y)); //display   
                array2dtop[x][y].setBounds(20,40,140,20);
                array2dtop[x][y].setActionCommand("x"); //itself value
                array2dtop[x][y].addActionListener(this);
                add(array2dtop[x][y]);
            }
        }

    }

    public void actionPerformed(ActionEvent evt) { //operation
        String cmd = evt.getActionCommand();

        if(cmd == "x") {
            System.out.println("x");
        }
    }

}

public class pratice3 {
    public static void main(String[] args) {
        BattleShip2 board = new BattleShip2("BattleShip");
        board.setSize(500, 400);
        board.setLocation(250, 250);
        board.setDefaultCloseOperation(board.EXIT_ON_CLOSE); //Press x to EXIT
        board.setVisible(true);
    }
}

Hi, i am creating a battleship game, and my idea is when the user or AI hit the button, it could show ship size For example, there have 3 ships: ship1(size = 3), ship2(size = 2), ship3(size = 1), and when the user/AI hit the ship1, and they see 3, they will know they hit ship1

but I am having troubles on the setActioncommand

on the code,

array2dtop[x][y].setActionCommand("x")

I want to assign or declare a integer(the size of the ship) into array2dtop[x][y] but I have no idea but assign a string and how can I use it in the actionPerformed

I want to assign or declare a integer(the size of the ship) into array2dtop[x][y]

You can just parse the string to an integer using Integer.parseInt :

class BattleShip2 extends JFrame implements ActionListener {

    JButton[][] array2dtop = new JButton[10][10];

    BattleShip2(String title) {

        super(title);
        setLayout(new GridLayout(10, 10, 5, 5));
        for (int x = 0; x < array2dtop.length; x++) {
            for (int y = 0; y < array2dtop.length; y++) {
                array2dtop[x][y] = new JButton(String.valueOf((x * 10) + y));
                array2dtop[x][y].setActionCommand(String.valueOf(3));
                array2dtop[x][y].addActionListener(this);
                // Force buttons to be square.
                Dimension dim = array2dtop[x][y].getPreferredSize();
                int buttonSize = Math.max(dim.height, dim.width);
                array2dtop[x][y].setPreferredSize(new Dimension(buttonSize, buttonSize));

                add(array2dtop[x][y]);
            }
        }
    }

    public void actionPerformed(ActionEvent evt) {

        int cmd = Integer.parseInt(evt.getActionCommand());
        if (cmd == 3) {
            System.out.println(3);
        }
    }
}

public class pratice3 {

    public static void main(String[] args) {

        BattleShip2 board = new BattleShip2("BattleShip");
        board.pack();
        board.setLocationRelativeTo(null);
        board.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        board.setVisible(true);
    }
}

Notes:

  • I changed the layout to GridLayout with the same vertical and horizontal gaps as FlowLayout 's defaults. It will assure that all button have the same size.
  • Don't use setBounds , let the layout manager take care of that.
  • I added 3 lines that make the buttons square, you can remove that.
  • Instead of using setSize for a JFrame , use pack .
  • Setting the location using board.setLocationRelativeTo(null) (After the call to pack ) is usually a better idea since you don't know the size of the screen.
  • board.EXIT_ON_CLOSE should be accessed in a static way: JFrame.EXIT_ON_CLOSE (for example).
  • When calling Integer.parseInt , you might want to catch NumberFormatException .

With that being said, there are other ways to achieve this, such as using setClientProperty on the buttons, or just passing the number to the ActionListener 's constructor.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM