2009-08-29 153 views
1

我正在与JTextField和文本字段的代码。我试图制作一个与记事本一样大的文本框,但光标总是出现在中间。我想放在文本框的开头。jtextfield默认光标位置

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

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

回答

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

+1:正确答案 – dfa 2009-08-29 18:17:03

+0

我不打算把它标记下来,因为它仍然是有用的信息,但它是*不*正确的答案 - 'JTextField'默认为水平排列,而海报的问题是垂直对齐的(因为你可以很快看到你是否运行代码)。 – 2009-08-31 07:45:11

+0

糟糕 - 应该是:“默认为_center_水平对齐”。 – 2009-08-31 07:56:36

3

不是很清楚的问题。由于您正在将文本字段添加到BorderLayout的中心,所以文本字段将自动调整垂直和水平方向的大小以填充帧中可用的空间。

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

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

我建议你使用尝试使用JTextArea。 Single Line Text Area可能以您想要的方式工作。

1

由于JTextField只包含一行文字,因此您可能更适合更合适地调整JTextField的大小。

据我所知,没有什么好的方法来完成你所要求的。请注意,虽然有setHorizontalAlignment(),但没有相应的setVerticalAlignment()setAlignmentY()也不这样做(设置添加到容器的组件对齐,这对JTextField没有意义)。

您可以通过将JTextFieldBorderLayout北部假的吧,具体如下:

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

但我怀疑你真的想可能是多行什么,在这种情况下,你应该使用一个JTextArea

1

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

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

不错的尝试:-)但实际上...不是问题的答案。除此之外:从不做任何手动定位/组件大小,这是LayoutManager的独占工作。 – kleopatra 2012-03-16 23:53:47