2011-01-12 23 views
0

Ich habe ein Panel mit GridlayoutJava, Swing, Gridlayout Problem

Aber wenn ich versuche, das Programm nur die erste Taste von 100 gezeigt ausgeführt werden. Der Rest erscheint nur, wenn ich den Cursor über sie bewege. Was ist los damit?

Hier ist die ganze Klasse (Life.CELLS = 10 und CellButton eine Klasse ist, die JButton erstreckt)

public class MainLayout extends JFrame { 

    public MainLayout() { 

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(650, 750); 
     setLayout(new FlowLayout()); 
     //setResizable(false); 

     final JPanel gridPanel = new JPanel(new GridLayout(Life.CELLS, Life.CELLS)); 

     for (int i=0; i<Life.CELLS; i++) { 
      for (int j=0; j<Life.CELLS; j++) { 
       CellButton jb = new CellButton(i, j); 
       jb.setPreferredSize(new Dimension(jb.getIcon().getIconHeight(), jb.getIcon().getIconWidth())); 
       buttons[i][j] = jb; 
       grid[i][j] = false; 

       gridPanel.add(jb); 
      } 
     } 
     add(gridPanel); 
    } 
} 

Dies ist Code von CellButton

package classes; 

import javax.swing.JButton; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 

public class CellButton extends JButton { 

    private int x; 
    private int y; 
    boolean alive; 
    ImageIcon icon; 
    boolean next; 

    // icons for grids 
    final ImageIcon dead = 
     new ImageIcon(JFrame.class.getResource("/images/image1.gif")); 
    final ImageIcon live = 
     new ImageIcon(JFrame.class.getResource("/images/image2.gif")); 

    public CellButton(int X, int Y) { 
     super(); 
     x = X; 
     y = Y; 
     alive = false; 
     icon = dead; 
     setIcon(icon); 
    } 

    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 

    public boolean isAlive() { 
     return alive; 
    } 

    public void relive() { 
     alive = true; 
     icon = live; 
     setIcon(icon); 
    } 

    public void die() { 
     alive = false; 
     icon = dead; 
     setIcon(icon); 
    } 

    public void setNext(boolean n) { 
     next = n; 
    } 

    public boolean getNext() { 
     return next; 
    } 

    public ImageIcon getIcon() { 
     return icon; 
    } 
} 
+0

Bitte senden Sie Ihren 'CellButton' Code. – Qwerky

+0

CellButton wurde hinzugefügt – josh

+0

Aktualisiert meine Antwort. Du musst dein X und Y loswerden; Es bricht JComponents Layout-Berechnungen. – Qwerky

Antwort

0

Es gibt eine Reihe von Dingen, die konnte falsch liegen; aber ohne mehr Code ist es schwer zu sagen. Als Referenz ist hier eine funktionierende example.

0

Sie müssen etwas anderes in Ihrem Code tun. Bitte posten Sie den genauen Code, den Sie verwenden. Der folgende Test zeigt ein 10x10 Raster von JButtons, wie ich es erwarten würde;

import java.awt.GridLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class GridLayoutTest 
{ 
public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 
    JPanel panel = new JPanel(new GridLayout(10,10,10,10)); 

    for (int i=0; i<100; i++) 
    { 
    panel.add(new JButton(String.valueOf(i))); 
    } 

    frame.add(panel); 

    frame.setSize(600,600); 
    frame.setVisible(true); 
} 
} 

Edit:
ich Ihr Problem sehen, haben Sie die getX() und getY() Methoden in JComponent falsch überschrieben. Befreien Sie sich von int x und int y Variablen und getX() und getY() Methoden, JButton bietet bereits diese.

+0

Ich sehe keine grundsätzlichen Unterschiede zwischen diesem und meinem Code. – josh