在这段代码中,我有一个面板,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
能够自动调整大小以产生看起来像这样的东西。
唯一的问题是我什么都不知道。我将不胜感激完成此任务的任何帮助。
编辑
当组件自动调整大小时,我也希望该组件的最大大小。这样,随着输入更多数据,该组件将无法继续调整某人计算机显示器的大小
Swing中没有提供内置功能来执行此操作。
您需要做的是DocumentListener
在文本字段后面的文档中添加一个,并在添加或删除文本时收到通知。
然后,您将需要为文本字段计算所需的新大小(它本身可能很棘手-您可能需要使用FontMetrics
),并调整控件的大小以匹配。此时,只需查看要调整大小的大小与希望允许的最大大小相比,即可轻松实现最大大小。
请参阅此处以获取有关以下信息DocumentListener
:https : //docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html
请参阅此处以获取有关以下信息FontMetrics
:https : //docs.oracle.com/javase/tutorial/2d/text/measuringtext.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句