2009-08-29 193 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