Добавление пользовательского компонента вручную в макет группы свинга - PullRequest
1 голос
/ 25 декабря 2011

У меня есть этот класс, который создает сетку:

 class GridPane extends JPanel{ 

    public GridPane(int row,int col){

      setLayout(new GridLayout(row,col));

      setBorder(BorderFactory.createEmptyBorder(1,1,1,1));

      for (int i =1; i<=(row*col); i++)
      {
         JPanel pan = new JPanel();
         pan.setBackground(Color.RED);
         pan.setPreferredSize(new Dimension(3,3));
         pan.setBorder(BorderFactory.createLineBorder(Color.BLACK));
         add(pan);
       } 
} 

И этот, который устанавливает пустой основной кадр с макетом группы:

public MainFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    GroupLayout gl_contentPane = new GroupLayout(contentPane);
    gl_contentPane.setHorizontalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGap(0, 440, Short.MAX_VALUE)
    );
    gl_contentPane.setVerticalGroup(
        gl_contentPane.createParallelGroup(Alignment.LEADING)
            .addGap(0, 268, Short.MAX_VALUE)
    );
    contentPane.setLayout(gl_contentPane);
}

Я не очень опытен сSWING и я пытались добавить объект GridPane справа от основного фрейма в течение некоторого времени.Он постоянно говорит мне что-то вроде:

java.lang.IllegalStateException: GridPane [, 0,0,0x0, недопустимый, layout = java.awt.GridLayout, alignmentX = 0.0, alignmentY = 0.0, border= javax.swing.border.EmptyBorder @ 6ba7508a, flags = 9, MaximumSize =, MinimumSize =, предпочитаемыйSize =] не привязан к вертикальной / горизонтальной группе

Кто-нибудь знает, что происходит?Что я должен сделать, чтобы достичь того, что мне нужно?Извините за размещение большого количества кода.Спасибо за помощь.

1 Ответ

2 голосов
/ 25 декабря 2011

Я бы предложил, чтобы в этом случае вы использовали BorderLayout .

contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());

contentPane.add(pan, BorderLayout.LINE_END);

Вот полный код.Я надеюсь, это то, что вы ищете.

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setLayout(new BorderLayout());
        GridPane gp = new GridPane(5, 5);

        frame.add(gp, BorderLayout.EAST);

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

class GridPane extends JPanel {

    public GridPane(int row, int col) {

        setLayout(new GridLayout(row, col));
        setPreferredSize(new Dimension(125, 125));
        setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));

        for (int i = 1; i <= (row * col); i++) {
            JPanel pan = new JPanel();
            pan.setBackground(Color.RED);
            pan.setPreferredSize(new Dimension(3, 3));
            pan.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            add(pan);
        }
    }
}

Полезные ссылки:

...