【发布时间】:2015-07-21 03:47:15
【问题描述】:
在这段代码中,我在GridBagLayout 中有一个面板,其中包含一个JLabel 和一个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();
}
}
我希望能够根据输入的数据量自动调整文本字段的大小。例如,当字符串“如何在到达它的边缘时自动调整这个组件的大小?”在 JTextField 中输入它看起来像这样。
但是,当我输入字符串时,我希望 JTextBox 和 JFrame 自动重新调整大小以生成看起来有点像这样的东西。
唯一的问题是我不知道有什么可以让我这样做。对于完成这项任务的任何帮助,我将不胜感激。
编辑
当组件自动调整大小时,我还希望该组件有一个最大大小。这样,当输入更多数据时,组件将不会不断调整某人计算机显示器的大小
【问题讨论】:
-
将 DocumentListener 添加到 JTextField,计算 JTextField 中的字符串长度或列数,以获取 JTextField 的 getPreferredSIze 或 Dimension,然后调用重新验证并重新绘制到 JFrame(也许这两个通知器必须包装到 invokeLater 中)
标签: java swing layout-manager gridbaglayout autoresize