Java jtextfield默认光标位置

Java jtextfield默认光标位置,java,swing,Java,Swing,我正在使用JTextField和文本字段的代码。我试图使文本字段和记事本一样大,但是光标总是出现在中间。我想输入文本字段的开头 tf=new JTextField(50); tf.setCaretPosition(0); f.setLayout(new BorderLayout()); f.add(tf,BorderLayout.CENTER); 尝试设置文本对齐方式: JTextField textfield = new JTextField("Initial Text"); // Le

我正在使用JTextField和文本字段的代码。我试图使文本字段和记事本一样大,但是光标总是出现在中间。我想输入文本字段的开头

tf=new JTextField(50);
tf.setCaretPosition(0);

f.setLayout(new BorderLayout());
f.add(tf,BorderLayout.CENTER);

尝试设置文本对齐方式:

JTextField textfield = new JTextField("Initial Text");

// Left-justify the text
textfield.setHorizontalAlignment(JTextField.LEFT);

// Center the text
textfield.setHorizontalAlignment(JTextField.CENTER);

// Right-justify the text
textfield.setHorizontalAlignment(JTextField.RIGHT);

尝试设置文本对齐方式:

JTextField textfield = new JTextField("Initial Text");

// Left-justify the text
textfield.setHorizontalAlignment(JTextField.LEFT);

// Center the text
textfield.setHorizontalAlignment(JTextField.CENTER);

// Right-justify the text
textfield.setHorizontalAlignment(JTextField.RIGHT);

这不是一个很清楚的问题。由于要将文本字段添加到BorderLayout的中心,因此文本字段将自动调整垂直和水平大小,以填充框架中的可用空间

默认情况下,光标将水平显示在左侧,垂直显示在中心。所以我想你抱怨的是垂直对齐。我不知道如何解决这个问题,因为这就是文本字段UI的工作方式

如果更改文本的字体大小,则文本将显示得更大,插入符号将显示得更靠上


我建议您使用JTextArea。这可能是你想要的方式。

不是一个很清楚的问题。由于要将文本字段添加到BorderLayout的中心,因此文本字段将自动调整垂直和水平大小,以填充框架中的可用空间

默认情况下,光标将水平显示在左侧,垂直显示在中心。所以我想你抱怨的是垂直对齐。我不知道如何解决这个问题,因为这就是文本字段UI的工作方式

如果更改文本的字体大小,则文本将显示得更大,插入符号将显示得更靠上

我建议您使用JTextArea。可能会按照您想要的方式工作。

因为JTextField只包含一行文本,所以您最好更适当地调整JTextField的大小

据我所知,没有什么好办法可以完全按照你的要求去做。请注意,虽然存在setHorizontalAlignment,但没有相应的setVerticalAlignment。setAlignmentY也没有设置添加到容器中的组件的对齐方式,这对于JTextField来说没有意义

您可以通过将JTextField放置在BorderLayout的北部来伪造它,如下所示:

tf.setBorder(null);
f.setBackground(Color.WHITE);
f.add(tf, BorderLayout.NORTH);  
f.add(Box.createVerticalGlue(), BorderLayout.CENTER);
但是我怀疑您真正想要的可能是多行,在这种情况下,您应该使用JTextArea。

因为JTextField只包含一行文本,所以您最好更适当地调整JTextField的大小

据我所知,没有什么好办法可以完全按照你的要求去做。请注意,虽然存在setHorizontalAlignment,但没有相应的setVerticalAlignment。setAlignmentY也没有设置添加到容器中的组件的对齐方式,这对于JTextField来说没有意义

您可以通过将JTextField放置在BorderLayout的北部来伪造它,如下所示:

tf.setBorder(null);
f.setBackground(Color.WHITE);
f.add(tf, BorderLayout.NORTH);  
f.add(Box.createVerticalGlue(), BorderLayout.CENTER);

但我怀疑您真正想要的可能是多行,在这种情况下,您应该使用JTextArea。

您应该使用JScrollPane。它将提供一个滚动条,也将满足您的需求

JTextArea area=new JTextArea();
JScrollPane scroll=new JScrollPane(area);
cnt.add(scroll);
area.setLineWrap(true);
scroll.setBounds(320, 100, 650, 300);

您应该使用JScrollPane。它将提供一个滚动条,也将满足您的需求

JTextArea area=new JTextArea();
JScrollPane scroll=new JScrollPane(area);
cnt.add(scroll);
area.setLineWrap(true);
scroll.setBounds(320, 100, 650, 300);

我不打算记下它,因为它仍然是有用的信息,但它不是正确的答案-JTextField默认为水平对齐,海报的问题是垂直对齐,如果你运行代码,你会很快看到。哦,那应该是:默认为中心水平对齐。我不打算记下它,因为它仍然是有用的信息,但它不是正确的答案-JTextField默认为水平对齐,海报的问题是垂直对齐,如果你运行代码,你可以很快看到。哦,应该是:默认为中心水平对齐。很好的尝试:-但实际上。。。这不是问题的答案。除此之外:永远不要手动定位/调整组件大小,这是LayoutManager的专属工作。很好的尝试:-但实际上。。。这不是问题的答案。除此之外:永远不要手动定位/调整组件大小,这是LayoutManager的专属工作。