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;
}
}
Bitte senden Sie Ihren 'CellButton' Code. – Qwerky
CellButton wurde hinzugefügt – josh
Aktualisiert meine Antwort. Du musst dein X und Y loswerden; Es bricht JComponents Layout-Berechnungen. – Qwerky