自动重新调整GridBagLayout中的组件大小

Dan*_*Dan 5 java swing layout-manager autoresize gridbaglayout

在这段代码中,我有一个面板,GridBagLayout其中包含a JLabel和a JTextField.

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

public class Simple
{
    JFrame simpleWindow = new JFrame("Simple MCVE");

    JPanel  simplePanel = new JPanel();

    JLabel lblSimple;
    JTextField txtSimple;

    public void numberConvertGUI()
    {
        simpleWindow.setBounds(10, 10, 420, 80);

        simpleWindow.setMinimumSize(new Dimension(420, 80));

        simpleWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        simpleWindow.setLayout(new GridLayout(1,1));

        createSimplePanel();

        simpleWindow.getContentPane().add(simplePanel);

        simpleWindow.setVisible(true);
    }

    public void createSimplePanel()
    {
        simplePanel.setLayout(new GridBagLayout());
        GridBagConstraints c = new GridBagConstraints();

        lblSimple = new JLabel();
        c.weightx = 0.0;
        c.weighty = 1.0;
        c.fill = GridBagConstraints.BOTH;
        c.insets = new Insets(0,2,0,2);
        c.gridx = 0;
        c.gridy = 0;
        c.ipady = 0;
        lblSimple.setText("Next to me is a JTextField: ");
        lblSimple.setHorizontalAlignment(JLabel.RIGHT);
        simplePanel.add(lblSimple, c);

        txtSimple = new JTextField();
        c.weightx = 0.5;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.ipady = 5;
        c.gridx = 1;
        c.gridy = 0;
        c.insets = new Insets(0,2,0,2);
        simplePanel.add(txtSimple, c);
    }

    public static void main(String[] args)
    {
        Simple s = new Simple();
        s.numberConvertGUI();
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够根据输入的数据量自动重新调整文本字段的大小.例如,当字符串"如何在达到它的边缘时自动重新调整此组件的大小?" 在JTextField中输入它看起来像这样.

它看起来像什么

然而,当我输入字符串时,我希望JTextBox并且JFrame自动重新调整大小以产生看起来有点像这样的东西.

重新调整大小的版本

唯一的问题是我不知道任何允许我这样做的事情.我非常感谢完成这项任务的任何帮助.

编辑

当组件自动重新调整大小时,我也希望该组件的最大大小.这样,当输入更多数据时,组件将不会继续重新调整某人的计算机监视器的大小

Tim*_*m B 1

Swing 中没有提供执行此操作的内置功能。

您需要做的就是DocumentListener在文本字段后面的文档中添加 ,并在添加或删除文本时收到通知。

然后,您需要计算文本字段所需的新大小(这本身可能很棘手 - 您可能需要使用FontMetrics)并重新调整控件的大小以匹配。此时,您可以轻松实现的最大尺寸,只需将您要调整的尺寸与您希望允许的最大尺寸进行比较即可。

有关信息,请参阅此处DocumentListenerhttps://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html

有关信息,请参阅此处FontMetricshttps://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html