Java 如何在运行时设置JTextField的宽度?
有人能帮我在运行时设置Java 如何在运行时设置JTextField的宽度?,java,swing,runtime,jtextfield,Java,Swing,Runtime,Jtextfield,有人能帮我在运行时设置JTextField的宽度吗?我希望在运行时调整文本字段的大小。它将询问用户长度,然后输入将更改文本字段的宽度 if(selectedComponent instanceof javax.swing.JTextField){ javax.swing.JTextField txtField = (javax.swing.JTextField) selectedComponent; //txtField.setColumns(numInput); //tried
JTextField
的宽度吗?我希望在运行时调整文本字段的大小。它将询问用户长度,然后输入将更改文本字段的宽度
if(selectedComponent instanceof javax.swing.JTextField){
javax.swing.JTextField txtField = (javax.swing.JTextField) selectedComponent;
//txtField.setColumns(numInput); //tried this but it doesn't work
//txtField.setPreferredSize(new Dimension(numInput, txtField.getHeight())); //also this
//txtField.setBounds(txtField.getX(), txtField.getY(), numInput, txtField.getHeight());
//and this
txtField.revalidate();
}
我使用的是null
布局,因为我处于编辑模式。您只需使用。这将允许您在运行时增加其大小。您无法在自己的位置执行此操作的原因是null
布局。这是不鼓励使用零布局/绝对定位的主要原因之一。以下是一个小示例,可供您尝试:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTextFieldExample
{
private JFrame frame;
private JPanel contentPane;
private JTextField tfield;
private JButton button;
private int size = 10;
private ActionListener action = new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
String input = JOptionPane.showInputDialog(
frame, "Please Enter Columns : "
, String.valueOf(++size));
tfield.setColumns(Integer.parseInt(input));
contentPane.revalidate();
contentPane.repaint();
}
};
private void createAndDisplayGUI()
{
frame = new JFrame("JTextField Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
tfield = new JTextField();
tfield.setColumns(size);
JButton button = new JButton("INC Size");
button.addActionListener(action);
contentPane.add(tfield);
contentPane.add(button);
frame.getContentPane().add(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new JTextFieldExample().createAndDisplayGUI();
}
});
}
}
对于绝对定位,您需要调用JTextField
,以获得结果,但您应始终记住不鼓励这种方法的原因,如第一段所述:
虽然可以不使用布局管理器,但如果可能的话,应该使用布局管理器。布局管理器可以更轻松地调整依赖于外观的组件外观、不同的字体大小、容器不断变化的大小以及不同的区域设置。布局管理器也可以被其他容器以及其他程序轻松重用
我只需使用setBounds
就可以调整文本字段的大小。请查看以下示例:
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Resize extends JFrame{
public JTextField jtf = new JTextField();
public Resize(){
//frame settings
setTitle("Resizable JTextField");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setSize(new Dimension(600,400));
setResizable(false);
//init and add text field to the frame
add(jtf);
jtf.setBounds(20,50,200,200);
//button to change text field size
JButton b = new JButton("Moar.");
add(b);
b.setBounds(20,20,b.getPreferredSize().width,b.getPreferredSize().height);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
jtf.setBounds(20,50,jtf.getSize().width+10,jtf.getSize().height); //THIS IS WHERE THE RESIZING HAPPENS
}
});
setVisible(true);
}
public static void main(String[] args){
Resize inst = new Resize();
}
}
“乐趣”小自助解决方案:
public static void main(String[] args) {
JFrame frame = new JFrame();
JTextField jTextField = new JTextField("Alice");
JPanel panel = new JPanel();
JButton grow = new JButton("DRINK ME");
JButton shrink = new JButton("EAT ME");
panel.add(jTextField);
panel.add(grow);
panel.add(shrink);
frame.add(panel);
frame.setVisible(true);
frame.pack();
grow.addActionListener(l -> resize(frame, jTextField, 2));
shrink.addActionListener(l -> resize(frame, jTextField, 0.5f));
}
private static void resize(JFrame frame, Component toResize, float factor) {
System.out.println(toResize.getPreferredSize());
toResize.setPreferredSize(new Dimension((int)(toResize.getPreferredSize().width * factor),
(int)(toResize.getPreferredSize().height * factor)));
toResize.setFont(toResize.getFont().deriveFont(toResize.getFont().getSize() * factor));
frame.pack();
}
注意:请注意,吃太多的蛋糕会害死你。哦:(我真的很喜欢编辑前的答案,上面写着…“绝对定位…”Eeek!让我们不要让新手走上疯狂和怪物的道路。哦,好吧,反正+1.:)@AndrewThompson:谢谢你指出我的错误,因此,我在上述方向上做了一些更改:-)-1用于空布局和手动调整大小-无论出现什么问题,这都不是问题所在solution@kleopatra很公平,虽然OP说他们想使用<代码> null <代码> LayOut.请考虑给你的答案增加一些解释。