Как заставить JTextField расширяться с помощью BorderLayout (Java)

У меня есть программа на Java, в которой я использую JTextField, но если я не укажу размер по умолчанию, он будет иметь ширину 0. Я вставляю его в BorderLayout, так как мне это сделать? развернуть, чтобы заполнить весь контейнер?

Ответов (4)

Решение

В приведенном выше примере текстовое поле будет работать нормально. Однако если вставить в ВОСТОК или ЗАПАД, это не сработает.

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JTextField;


public class TextFieldTest {
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setLayout(new BorderLayout());
        JTextField tf = new JTextField();
        f.getContentPane().add(BorderLayout.EAST, tf);
        f.pack();
        f.setVisible(true);
    }
}

Мой вопрос к вам: должен ли это быть BorderLayout или вы можете использовать другие менеджеры макетов? Если вы можете, вы должны проверить GridBagLayout, что вы можете настроить автоматическое расширение элемента (с использованием веса), чтобы он соответствовал всему контейнеру.

Заполнить всю емкость? С BorderLayout?

container.add( jTextField, BorderLayout.CENTER );

Просто как тот.

Он автоматически заполнится до ширины контейнера, как показано в примере:

    import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JTextField;


public class TextFieldTest {
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setLayout(new BorderLayout());
        JTextField tf = new JTextField();
        f.add(tf, BorderLayout.SOUTH);
        f.pack();
        f.setVisible(true);
    }
}

При программировании с помощью Swing ключевым моментом является использование хорошего менеджера компоновки. Для меня идеальным менеджером по расположению является MigLayout . Это просто лучшее универсальное решение для всех потребностей в макете. Их сайт предоставляет отличную документацию и примеры.