Неправильное поведение при конкатенации строк, когда выравнивание компонента равно "RIGHT_TO_LEFT"
private JTextField resultTextField = new JTextField("0");
resultTextField.setFont(textFieldFont);
resultTextField.setBounds(COMMON_X, COMMON_Y, 180, 50);
resultTextField.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
add(resultTextField);
Я создал JTextField, как указано выше. Мое приложение состоит из цифровых кнопок и '.'. Когда я нажимаю на цифровые кнопки, они добавляются справа (то есть "5" на 5 нажатий, а затем "52" на 2 щелчка). Но при нажатии на "." Кнопка ожидаемого результата - "5". но он отображается как ".5", а затем при нажатии "2" отображается "5.2 ". Где я могу пойти не так?
2 ответа
Я предполагаю (из ваших тегов), что вы программируете какой-то калькулятор и что вы хотите получить текст, выровненный по правому краю, а не текст, ориентированный справа налево. Ориентация справа налево используется, например, для арабских языков, которые пишутся (как вы уже догадались) справа налево вместо "западного" способа письма слева направо.
Я предлагаю вам удалить applyComponentOrientation()
и посмотрите вместо этого на setHor HorizontalAlignment.
PS: как говорится, я не могу сказать, почему "5" + ". равно ".5", но "5" + "." + "2" отображается как "5.2".
Я заинтересовался и произвел следующее SSCCE:
import java.awt.ComponentOrientation;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class BasicFrame extends JFrame
{
public static void main(String[] args)
{
BasicFrame frame = new BasicFrame();
frame.go();
}
private void go()
{
JTextField resultTextField = new JTextField("0");
resultTextField.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
add(resultTextField);
pack();
setVisible(true);
}
}
Так что теперь у меня есть тот же вопрос: если я очищаю поле и ввожу "123", он выглядит как "123"; когда я нажимаю клавишу периода (любой из них), поле показывает ".123"; если я затем введу "abc", в поле появится "123.abc"; точка переходит вправо от отображаемой строки, когда я вхожу в 'а'. Это не следует тому, что мой бывший босс назвал "принципом наименьшего наказания"...