2011-01-03 3 views
1

Ich versuche ein Schlachtschiff zu machen, ich habe die Kontrolle über die Boards. Wie mache ich ein Array, mit dem jeder Button eine Position zurückgeben kann. Zum Speichern der Schiffe und der Treffer und Sachen. Ich möchte jeden einzelnen Button machen, bin mir aber nicht sicher, wie ich das machen soll.Wie erstelle ich individuelle Schaltflächennamen in einem Array?

Antwort

2

Sie könnten auf die Schaltfläche Klasse erweitern:

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; 
    } 
} 

Dann Sie die Tasten in einer Schleife instanziiert konnte und in den richtigen Koordinaten übergeben.

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)); 
    } 
} 

Dann wird jede Taste, um die richtigen Koordinaten, die Sie bei Verwendung getCoordiantes() bekommen können.

+0

der JButton möglicherweise ein Attribut, das die Position auf dem Bildschirm behalten. – Seva

+0

@Alan, richtig, Sie können 'getLocation()' oder 'getLocationOnScreen()' verwenden, aber das gibt Ihnen nur Pixelkoordinaten. Dadurch erhalten Sie logische Schlachtschiffkoordinaten. – jjnguy

+0

Vielen Dank :) – matt

0

Tun Sie sie einfach in einer Matrix, wenn Sie wissen wollen, ihre Positionen, ihr Index, sollte ausreichen.

Wenn Sie wollen Genauer gesagt, können Sie Ihre eigenen Schaltflächen erstellen und dann eine Funktion vornehmen, die zurückkehren, diese Position

0

Nur nicht, wenn diese Ihnen helfen kann, aber besser als nichts i verwendete Form Anwendung gehen nehmen Sie einen Blick voraus

Sie ein Array wie diese

erstellen
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 
} 

nach diesen Codes i ll Notwendigkeit, ein Ereignis erstellen auf die Schaltfläche Click-Ereignis zu fangen :)

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 :) 
} 

Hoffnung, dies hilft Ihnen

+0

Wo hast du C# in der Frage gesehen? – adamax

0

eine neue Klasse erstellen, die Abstract erstreckt. Geben Sie ihm Attribute für die Koordinaten und erstellen Sie neue Instanzen, die beim Erstellen der Schaltflächen an den JButton-Konstruktor übergeben werden.

Dadurch überschreiben Sie die actionPerformed-Methode von Action, damit Sie mit einem Button-Klick-Event diese Koordinaten verwenden können, die alle in der gleichen Klasse enthalten sind.

Verwandte Themen