Компоненты в Gridlayout wit Jpanel неверно заполняет сетку

StackOverflow https://stackoverflow.com/questions/4112886

Вопрос

Я пытаюсь помешать Gridlayout в jpanel от заполнения клеток полностью и игнорируя какие-либо сантизирующие компоненты

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

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

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

Спасибо

Это было полезно?

Решение

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

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

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

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

Другие советы

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

В любом случае, я рекомендую вам попробовать Miglayout Для всех ваших нужд макета. Вы будете удивлены это простота!

Весь смысл Gridlayout состоит в том, чтобы расположить компоненты в обычной сетке. Ваш setSize Звонки будут переопределены менеджером макета. Возможно setPreferredSize или setMaximumSize Может работать, но это зависит от менеджера макета, чтобы решить принять их во внимание.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top