简体   繁体   中英

Fixed height and width for JTextField

I've been working with Java Swing recently and when I try to add 3 JTextFields beneath each other they fill out the whole JFrame. But I want them to have a fixed height and width. What can I do?

Since I'm new to this topic I wasn't able to try out many things. I haven't found anything in other forums either.

My goal was to make a simple GUI for Users to fill in their credentials. Those credentials should be filled into an array but I haven't got there yet.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class PeopleGUI extends JFrame{
    JPanel jp = new JPanel();
    JLabel jl = new JLabel();
    JTextField jt = new JTextField(30);
    JTextField jt1 = new JTextField(30);
    JTextField jt2 = new JTextField(30);
    JButton jb = new JButton("Enter");

    public PeopleGUI(){
        setTitle("PeopleGUI");
        setVisible(true);
        setSize(400,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        jp.setLayout(new BoxLayout(jp, BoxLayout.Y_AXIS));

        jp.add(jt);
        jp.add(jt1);
        jp.add(jt2);

        jt.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){
                String input = jt.getText();
                jl.setText(input);
            }
        });

        jp.add(jb);

        jb.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                String input = jt.getText();
                jl.setText(input);
            }
        });

        jp.add(jl);
        add(jp);
    }

    public static void main(String[] args) {

        PeopleGUI p = new PeopleGUI();
    }
}

I expect JTextFields that don't adjust to the size of the window.

Currently, it is looking like this:
当前外观 .

But it should rather look like:
预期的外观 .

在此处输入图片说明

That layout is easily reproduced by putting 3 panels, each with a centered FlowLayout , into a single column GridLayout .

The important part is the FlowLayout , which will respect the preferred size of the components it is displaying.

Combinations of different layouts are often used when making a GUI. The idea is for each to handle a small part of the layout needs of the entire user interface. Here is a screenshot from that answer which lists the layouts used, by way of titled borders for each one.

在此处输入图片说明

But I think it would be better if the RHS of the label and the LHS of the fields are aligned vertically. To do that, use a single GridBagLayout .

You have to use a Layout eg BoxLayout. You will find some documentation here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM