2009-08-29 4 views
1

Я работаю с JTextField и кодом для текстового поля. Я пытаюсь сделать текстовое поле размером с блокнот, но курсор всегда появляется посередине. Я хочу включить начало текстового поля.jtextfield default position position

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

+0

Я не буду отмечать его вниз, так как это все-таки полезная информация, но это * не * правильный ответ - 'JTextField' по умолчанию выравнивания по горизонтали, и проблема в автора с вертикальным выравниванием (так как вы можете быстро увидеть, запускаете ли вы код). –

+0

К сожалению - это должно быть: «по умолчанию - горизонтальное выравнивание _center_». –

3

Не очень ясный вопрос. Поскольку вы добавляете текстовое поле в центр BorderLayout, текстовое поле автоматически изменяет размер как по вертикали, так и по горизонтали, чтобы заполнить пространство, доступное в кадре.

По умолчанию курсор появится в горизонтальном и вертикальном направлениях по вертикали. Поэтому я думаю, что вертикальное выравнивание - это то, о чем вы жалуетесь. Ну, я не знаю, как решить проблему, так как это работает в пользовательском интерфейсе текстового поля.

Если вы измените размер шрифта текста, то он будет больше, а каретка будет отображаться больше.

Предлагаю вам попробовать использовать JTextArea. Single Line Text Area может работать так, как вы хотите.

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 ,

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