java改变Textfield的大小

时间:2014-11-08 22:07:27

标签: java swing layout jtextfield

我想制作一个你必须输入你的名字和东西的框架。我试着把它命名为: textfield ,下一行,年龄: textfield 等等......但是文本域非常高。如果我在框架的一个面板中添加2个文本字段,则一个文本字段包含我的屏幕的一半。我尝试用布局管理器解决这个问题,但我不知道如何。

有人可以帮助我吗?

这是我的代码:

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

class GUI{
    public static void main(String [] args){
        GUI g = new GUI();
        g.Start();
    }

    public void Start(){
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setSize(640, 640);            
        JPanel panel = new JPanel();
        JPanel west = new JPanel();         
        JLabel name = new JLabel("Name: ");
        JLabel age = new JLabel("Age: ");           
        JTextField field1 = new JTextField();
        JTextField field2 = new JTextField();           
        west.setLayout(new BoxLayout(west, BoxLayout.Y_AXIS));
        west.add(name);
        west.add(age);      
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(field1);
        panel.add(field2);          
        frame.getContentPane().add(BorderLayout.CENTER, panel);
        frame.getContentPane().add(BorderLayout.WEST, west);
        frame.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:4)

BoxLayoutBorderLayout的组合对您不利,请考虑使用GridBagLayout之类的内容。

有关详细信息,请查看How to Use GridBagLayout

GridBagLayout

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class LayoutTest {

    public static void main(String[] args) {
        new LayoutTest();
    }

    public LayoutTest() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JPanel form = new JPanel(new GridBagLayout());

                JLabel name = new JLabel("Name: ");
        JLabel age = new JLabel("Age: ");

        JTextField field1 = new JTextField(10);
        JTextField field2 = new JTextField(3);

                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridx = 0;
                gbc.gridy = 0;
                gbc.anchor = GridBagConstraints.WEST;

                form.add(name, gbc);
                gbc.gridy++;
                form.add(age, gbc);

                gbc.gridx++;
                gbc.gridy = 0;
                form.add(field1, gbc);
                gbc.gridy++;
                form.add(field2, gbc);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(form);
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

答案 1 :(得分:-1)

不确定您正在使用哪个IDE,但我确实知道,使用Eclipse,WindowBuilder Pro可以帮助您解决这个问题。

你要找的是setBounds(x,y,width,height)。在GUI的对象上使用它。

x,y是相对于我们正在工作的窗口的对象原点(0,0)的坐标。原点也位于窗口的左上角,离你越远它在x / y方向上,数量增加。与学校的典型图表略有不同。

这是我的一个GUI的一段代码,作为一个例子。

final TextField textField_1 = new TextField();
textField_1.setBounds(10, 231, 370, 22);
panel.add(textField_1);