Как я могу управлять шириной JTextFields в Java Swing?

Я пытаюсь иметь несколько JTextFields на одной строке, но я не хочу, чтобы у них была та же ширина. Как я могу управлять шириной и сделать некоторых из них шире, чем другие? Я хочу это, они вместе поднимают 100% общей ширины, таким образом, было бы хорошо, если я мог бы использовать некоторое взвешивание.

Я попробовал .setColumns() но это не имеет смысла.

Вот пример, где я использую три строки с тремя строками, которые должны появиться как в столбцах:

import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class RowTest extends JPanel {

    class Row extends JComponent {
        public Row(String str1, String str2, String str3) {
            this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));

            JTextField fld1 = new JTextField(str1);
            JTextField fld2 = new JTextField(str2);
            JTextField fld3 = new JTextField(str3);

            fld1.setColumns(5); // makes no sense

            this.add(fld1);
            this.add(fld2);
            this.add(fld3);
        }
    }

    public RowTest() {
    this.setLayout(new GridLayout(5,0));

    this.add(new Row("Short", "A long text that takes up more space",
        "Short again"));
    this.add(new Row("Longer but short", "Another long string", "Short"));
    this.add(new Row("Hello", "The long field again",
        "Some info"));
    }

    public static void main(String[] args) {
        new JFrame() {{ this.getContentPane().add(new RowTest());
                            this.pack(); this.setVisible(true); }};
    }

}
20
задан Jonas 24 May 2010 в 14:36
поделиться

2 ответа

Все компоненты Swing имеют предпочтительный размер. Предпочтительный размер текстового компонента зависит от текста компонента. Обычно компонент окрашивается в желаемый размер.

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

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

Редактировать:

В соответствии с последними требованиями вы можете использовать Относительный макет .

6
ответ дан 29 November 2019 в 23:16
поделиться
// 1. create JTextField
yourTextField = new JTextField();
// 2. store default height
int defaultHeight = yourTextField.getSize().getHeight();
// 3. set custom width and default height
yourTextField.setSize(new Dimension(yourWidth, defaultHeight));
0
ответ дан 29 November 2019 в 23:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: