Java, свинг, Gridlayout проблема - PullRequest
       10

Java, свинг, Gridlayout проблема

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

У меня есть панель с GridLayout

Но когда я пытаюсь запустить программу, отображается только первая кнопка из 100. Кроме того, остальные появляются только тогда, когда я перемещаю курсор над ними. Что с ним не так?

Вот весь класс (Life.CELLS = 10, а CellButton - это класс, расширяющий JButton)

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

Это код 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;
    }
}

1 Ответ

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

Вы должны делать что-то еще в вашем коде.Пожалуйста, напишите точный код, который вы используете.Следующий тест показывает сетку JButtons размером 10x10, как я и ожидал;

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:
Я вижу вашу проблему, вы переопределили методы getX() и getY() в JComponentнеправильно.Избавьтесь от переменных int x и int y и методов getX() и getY(), JButton уже предоставляет их.

...