JTextField Фиксированная высота - PullRequest
7 голосов
/ 02 апреля 2011

Как получить JTextField фиксированной высоты при увеличении кадра?Я хочу, чтобы это выглядело как приложение Skype в Ubuntu.

private JTextField username;
private JPasswordField password;
private JLabel usernamelabel;
private JLabel passwordlabel;
public LoginPanel(){


    setSize(200,200);
    setLayout(new GridLayout(4,4));
    setBackground(new Color(85,153,187));
    setBorder(BorderFactory.createEmptyBorder(70, 70, 70, 70));
    username = new JTextField();
    password = new JPasswordField();
    usernamelabel= new JLabel("Username");
    passwordlabel= new JLabel("Password");
    username.setBounds(5, 5, 100, 100);
    username.setPreferredSize(new Dimension(80,20));
    password.setPreferredSize(new Dimension(80,20));
    add(usernamelabel);
    add(username);
    add(passwordlabel);
    add(password);

Ответы [ 5 ]

6 голосов
/ 02 апреля 2011

Не используйте макет, отличный от GridLayout, и не помещайте текстовое поле в другую панель с FlowLayout внутри вашего GridLayout.

3 голосов
/ 21 февраля 2012

Я думаю, что это решит вашу проблему.

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

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

public class Main { 

/**
 * @param args
 */
public static void main(String[] args) {
    JFrame failFrame = new JFrame();
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new GridLayout(0, 4));

    JPanel leftTextFieldPanel = new JPanel();
    leftTextFieldPanel.setLayout(new FlowLayout());        
    JPanel rightTextFieldPanel = new JPanel();
    rightTextFieldPanel.setLayout(new FlowLayout());

    JTextField leftTextField = new JTextField();
    leftTextField.setPreferredSize(new Dimension(150,20));              
    JTextField rightTextField = new JTextField();
    rightTextField.setPreferredSize(new Dimension(150,20));

    leftTextFieldPanel.add(leftTextField);
    mainPanel.add(leftTextFieldPanel);

    rightTextFieldPanel.add(rightTextField);
    mainPanel.add(rightTextFieldPanel);

    mainPanel.add(new JPanel());
    mainPanel.add(rightTextFieldPanel);
    mainPanel.add(new JPanel());

    failFrame.add(mainPanel);
    failFrame.setSize(600, 400);
    failFrame.setLocationRelativeTo(null);
    failFrame.setVisible(true);
}
}

Я использовал вложенные макеты. Вверху находится ваш GridLayout, а текстовые поля находятся в FlowLayout, которые добавляются на панель gridLayout. Таким образом, текстовые поля больше не растягиваются.

2 голосов
/ 02 апреля 2011

Вы можете сослаться на здесь .

Метод setMaximumSize можно найти в JComponent , а JTextField может использовать этот метод из JComponent.

РЕДАКТИРОВАТЬ : Тем не менее, кажется нецелесообразным жестко кодировать размер JTextField, особенно когда вы запускаете его на нескольких платформах, поскольку у вас могут возникнуть проблемы с размером шрифта.

0 голосов
/ 31 октября 2011

В крайнем случае занимаюсь

tf.setMaximumSize(tf.getMinimumSize())

будет поддерживать постоянный размер и нейтральную платформу.

0 голосов
/ 02 апреля 2011

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

private JTextField username;
private JPasswordField password;
private JPanel [] login = {new JPanel(), new JPanel()};
private JLabel usernamelabel;
private JLabel passwordlabel;

public LoginPanel(){

    setSize(200,200);
    setBackground(new Color(85,153,187));
    setBorder(BorderFactory.createEmptyBorder(70, 70, 70, 70));
    username = new JTextField();
    password = new JPasswordField();
    usernamelabel= new JLabel("Username");
    passwordlabel= new JLabel("Password");
    login[0].add(usernamelabel);
    login[0].add(username);
    login[1].add(passwordlabel);
    login[1].add(password);
    for(JPanel p : login){
        p.setBackground(new Color(85,153,187));
        this.add(p);
    }
    username.setBounds(5, 5, 100, 100);
    username.setPreferredSize(new Dimension(120,20));
    password.setPreferredSize(new Dimension(120,20));

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...