Компоненты в GridLayout с JPanel некорректно заполняют сетку - PullRequest
1 голос
/ 06 ноября 2010

Я пытаюсь помешать GridLayout в JPanel полностью заполнить ячейки и игнорировать любые setSize компонентов

Я использую этот код:

import javax.swing.*;
import java.awt.*;

public class GrideComponents{
  public static void main(String[] args) {
    JFrame frame = new JFrame("Laying Out Components in a Grid");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel(new GridLayout(5,2,0,0));
    panel.add(new JLabel("Enter name"));
    JTextField a = new JTextField(5);
    a.setSize(10, 10);
    panel.add(a);
    panel.add(new JLabel("Enter Roll"));
    panel.add(new JTextField(3));
    panel.add(new JLabel("Enter Class"));
    panel.add(new JTextField(3));
    panel.add(new JLabel("Enter Total Marks"));
    panel.add(new JTextField(3));
    panel.add(new JButton("Ok"));
    panel.add(new JButton("Cancel"));
    frame.add(panel);
    frame.setSize(400,400);
    frame.setVisible(true);
  }
}

И каждый компонент заполняет ячейку ГРИ вместо того, чтобы быть в указанном размере.

Спасибо

Ответы [ 4 ]

1 голос
/ 06 ноября 2010

Смысл GridLayout в том, чтобы расположить компоненты в регулярной сетке.Ваши setSize вызовы будут переопределены менеджером по расположению.Возможно, setPreferredSize или setMaximumSize могут работать, но менеджер по верстке должен принять их во внимание.

1 голос
/ 06 ноября 2010

Прочтите учебник Swing по Использование менеджеров по макету , чтобы понять основы работы менеджеров по макету.

GridLayout изменяет размеры всех компонентов до одного размера.

При создании формы вы обычно вкладываете разные панели, используя разные менеджеры макетов, чтобы получить желаемый эффект.

В этом случае вы можете использовать FlowLayout для кнопок.Тогда вы можете использовать GridBagLayout или SpringLayout для других компонентов.

1 голос
/ 06 ноября 2010

Вы пробовали установить setMaximumSize и setPreferredSize?

В любом случае, я рекомендую попробовать MiGLayout для всех ваших потребностей макета. Вы будете удивлены его простотой!

0 голосов
/ 06 ноября 2010

BoxLayout является полезной альтернативой в этом контексте, как показано в этом примере .

...