jtextfield默认光标位置

时间:2009-08-29 17:39:08

标签: java swing

我正在使用JTextField和文本字段的代码。我正在尝试制作与记事本一样大的文本字段,但光标始终显示在中间。我想放入文本字​​段的开头。

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

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

4 个答案:

答案 0 :(得分:3)

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

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

如果更改文字的字体大小,则它会显得更大,插入符号会显示在顶部。

我建议您使用JTextArea进行尝试。 Single Line Text Area可能会按照您想要的方式运行。

答案 1 :(得分:2)

尝试设置文字对齐方式:

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);

答案 2 :(得分:1)

由于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

答案 3 :(得分:1)

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

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