设置JTextField宽度以匹配JPanel的宽度

时间:2014-10-16 03:27:49

标签: java methods jpanel jtextfield

我正在寻找一种方法来设置JTextField的显示,以占据包含它的JPanel的整个宽度。

我能够找到的唯一方法是setColumns()方法与getWidth()之后JPanel之后调用的pack()方法相结合setVisible()调用{1}}个方法。但是当我这样做时,JTextField最终会比包围它的JPanel大得多。我对这种情况发生的假设是getWidth()返回JPanel的大小(以像素为单位),而JTextField中的列都大于像素。

我甚至没有寻找动态调整大小的字段,只是为了与程序开头的JPanel一样宽

任何帮助非常感谢

1 个答案:

答案 0 :(得分:4)

使用合适的布局管理器......

请记住,组件的责任不是决定它应该有多大,这是布局管理器的责任,组件只能提供有关它有多大的提示......

例如,您可以使用GridBagLayout ...

执行此操作

enter image description here

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

public class Test {

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

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

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

    public class TestPane extends JPanel {

        public TestPane() {

            JTextField field = new JTextField(10);
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.weightx = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            add(field, gbc);

        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }

    }

}

请查看Laying Out Components Within a Container了解详情