2010-11-06 3 views
1

я пытаюсь предотвратить GridLayout в JPanel от заполнения ячеек целиком и полностью игнорируя SetSize компонентовКомпоненты 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 вместо того, чтобы быть в указанном размере.

Благодаря

ответ

1

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

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

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

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

+0

Спасибо за ваш ответ, я попробую то, что вы предложили. Между тем, я только что создал несколько панелей с сеткой, чтобы лучше разместить мои компоненты. –

1

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

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

+0

GridLayout - простой менеджер макетов с простыми правилами. Я собирался спуститься по той же причине, что объяснил джебрабит. Я считаю, что люди должны знать, как работают менеджеры по умолчанию, прежде чем использовать/рекомендовать сторонние библиотеки. – camickr

+0

Хотя я согласен с этим, я считаю, что MiGLayout может быть исключением, потому что: a) этот единственный менеджер макета может заменить ВСЕ встроенных менеджеров; б) он очень маленький по размеру (~ 75 кб) и с) http: //bugs.sun .com/bugdatabase/view_bug.do? bug_id = 6530906 (многие хотят, чтобы он был включен в JDK 7) – pek

1

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

+0

-1, используя setPreferredSize() или setMaximumSize(), не будет иметь эффекта при использовании GridLayout. Прочтите документацию по API или прочитайте учебник Swing. Вся точка GridLayout состоит в том, что каждый элемент изменяется до размера самого большого компонента, добавленного в сетку. – camickr

+0

Вот почему я сказал: «возможно ... может работать, но до менеджера макетов». OP также может прочитать документацию, нет? – jackrabbit

Смежные вопросы