Как создать отдельные имена кнопок в массиве? - PullRequest
1 голос
/ 03 января 2011

Я пытаюсь сделать игру линкора, я контролирую доски. Как мне сделать массив, который позволит каждой кнопке возвращать позицию. Для хранения кораблей и хитов и прочего. Я хочу сделать каждую кнопку индивидуальной, но не знаю, как это сделать.

Ответы [ 4 ]

2 голосов
/ 03 января 2011

Вы можете расширить класс кнопок:

public class BattleShipButton extends JButton {

    private Coordinate coords;
    public BattleShipButton(Coordinates coords) {
        this.coords = coords;  
        setPreferredSize(new Dimension(20, 20));
    }
    public Coordinates getCoordinates() {
        return coords;
    }
}

Затем вы можете создать экземпляр кнопок в цикле и передать правильные координаты.

BattleShipButton[][] buttons = new BattleShipButton[boardWidth][boardHeight];
for(int i = (int)'a'; i < boardWidth; i++){
    for(int j = 0; j < boardHeight; j++) {
        buttons[i][j] = new BattleShipButton(new Coordinate((char)i, j));
    }
}

Тогда каждая кнопка будет иметьправильные координаты, которые вы можете получить, используя getCoordiantes().

0 голосов
/ 03 января 2011

Создайте новый класс, который расширяет AbstractAction. Присвойте ему атрибуты для координат, создайте новые экземпляры и передайте конструктору JButton при создании кнопок.

При этом вы переопределите метод ActionPerformed, чтобы позволить вам событие нажатия кнопки, чтобы использовать все эти координаты, красиво упакованные в одном классе.

0 голосов
/ 03 января 2011

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

Вы можете создать такой массив

Button[] Barray = new Button[32,32];

than you will have to fill this array 

for (int i = 0; i <= a - 1; i++)
{

for (int j = 0; j <= b - 1; j++)
        {
    Barray (i, j) = new Button(); // here you create a dynamic button

        Barray (i, j).Location = new System.Drawing.Point(x, y); // here you locate the button in to your box or in a similar container

        Barray (i, j).Size = new System.Drawing.Point(23, 23); // in this line you resize your button 

        Barray (i, j).Name = i + j; // in this lie you rename your button so that you will be able to reach your button and know what is its location
        Barray (i, j).Click += Button_Click; // in this line you will add the button_click event to your dynamic buttons
        Form1.box.Controls.Add(dizi(i, j)); // and this line adds your button to your container 
        x += 23; // in this line i am increasing the x location so i the buttons will not be placed at  the same x location
    }
    x = 0; // this line i ll make x zero that means i m finis previous line and i ll start to place buttons on another line 
    y += 23; // this line i m increasing the y location to move the next line
}

после этих кодов яВам нужно создать событие, чтобы поймать событие нажатия кнопки:)

private void button_Click(object sender, System.Windows.Forms.MouseEventArgs e)
{   
//here you can use e eventargs reach your buttons name so you can do anything you want :)
}

надеюсь, это поможет вам

0 голосов
/ 03 января 2011

Просто сделайте их в матрице, если вы хотите знать их позиции, их индекса должно быть достаточно.

Если вы хотите быть более конкретным, вы можете создать свои собственные кнопки и сделать так, чтобы у них была функция, котораяверните эту позицию

...