Java FlowLayout - Margin/padding определенных элементов?

Я очень новичок в Swing, и я пытаюсь создать графический интерфейс. Используя средство создания графического интерфейса Netbeans, мне удалось сделать то, что мне понравилось. Но мне не по себе от того, что я использовал для этого редактор, поэтому сейчас пытаюсь сделать такой же дизайн с помощью кода. Вот картина того, что я пытаюсь сделать: что я хочу сделатьПрямо сейчас я просто сосредотачиваюсь на создание раздела «Критерии» (да, я знаю, что написал это неправильно на картинке). Вот что у меня есть на данный момент: «то, я выделил красным, где я хочу увеличить маржу:

  • Между правой частью текстовых полей и левой частью меток
  • Между верхней частью панели Criteria и JFrame
  • Между левой и правой сторонами панели и JFrame

Я пришел из веб-разработки, где я хочу увеличить прибыль. Если это неправильная терминология, пожалуйста, сообщите мне. Вот код, который я сейчас использую:

public class Criteria extends JPanel {
    JLabel JobLabel = new JLabel();
    JLabel BoxLabel = new JLabel();
    JLabel PartLabel = new JLabel();
    JTextField JobInput = new JTextField();
    JTextField BoxInput = new JTextField();
    JTextField PartInput = new JTextField();

    public Criteria() {
        setLayout(new FlowLayout(FlowLayout.LEADING));
        setBorder(BorderFactory.createTitledBorder("Criteria"));
        JobLabel.setText("Job");
        JobLabel.setLabelFor(JobInput);
        BoxLabel.setText("Box");
        BoxLabel.setLabelFor(BoxInput);
        PartLabel.setText("Part");
        PartLabel.setLabelFor(PartInput);
        JobInput.setColumns(8);
        BoxInput.setColumns(8);
        PartInput.setColumns(8);
        add(JobLabel);
        add(JobInput);
        add(BoxLabel);
        add(BoxInput);
        add(PartLabel);
        add(PartInput);
    }
}

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


person fruitcup    schedule 09.06.2012    source источник


Ответы (2)


Swing имеет тенденцию называть поля или границы «пробелами». Класс FlowLayout (наряду с несколькими другими классами компоновки) позволяет вам устанавливать горизонтальные и вертикальные промежутки в своем конструкторе, например:

private static final int PADDING = 3;   // for example
...
    setLayout(new FlowLayout(FlowLayout.LEADING, PADDING, PADDING));

Однако это добавит отступы между метками и их текстовыми полями, но вы можете заключить каждую пару в JPanel (возможно, в FlowLayout). Я бы сделал для этого собственный класс компонентов.

person Harry Cutts    schedule 09.06.2012
comment
Я слышал об этом, однако я хотел бы изменить только промежутки между некоторыми элементами. Например, я хочу сохранить текущий зазор между заданием и первым ящиком, но увеличить зазор между первым ящиком и ящиком. (однако это помогает с пробелами между JPanel и Frame, так что спасибо) - person fruitcup; 09.06.2012
comment
Ах. Я не знаю, как сделать это выборочно, но вы можете обернуть каждый заголовок и текстовое поле в свою собственную JPanel. Что бы я сделал, так это создал пользовательский компонент (расширяющий JPanel), который содержит заголовок и текстовое поле в каком-то макете (возможно, FlowLayout), а затем добавил их на вашу основную панель FlowLayout. - person Harry Cutts; 09.06.2012
comment
Это отлично работает. Вы должны обновить свой ответ, чтобы включить это, тогда я отмечу его как принятый. Спасибо. :) - person fruitcup; 09.06.2012

Вы должны изучить использование EmptyBorder, чтобы дать вашим компонентам "заполнение". Вы можете создавать составные границы или вкладывать JPanel, если вам нужно более одного типа границы вокруг JPanel или другого компонента. Для промежутков между компонентами вы можете использовать настройки FlowLayout, как указано выше, или использовать распорку из класса Box.

person Hovercraft Full Of Eels    schedule 09.06.2012