单击字段顶部时,java JTextField插入符号在开始位置的定位
当我单击JTextField的顶部时,插入符号将置于起始位置,而不管鼠标的x位置是什么。使用JPasswordField时不会发生这种情况
在这种特殊情况下,如何使JTextField像JPasswordField一样工作。 如果您想尝试,下面是代码:
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
panel.add(new JTextField("click here ^"));
panel.add(new JPasswordField("click here ^"));
frame.add(panel);
frame.setSize(200, 200);
frame.setVisible(true);
}
在本例中,JTextArea的行为类似于JPasswordField,但所有其他组件的行为类似于JTextField
# 1 楼答案
您可以添加鼠标侦听器并手动设置选择:
作为旁注,请注意,如果您将JPasswordField的echo char设置为“(char)0”(例如,不屏蔽文本),则选择行为与JTextField相同(很可能是camickr引用的视图的影响)
# 2 楼答案
据我所知
viewToModel(...)
方法将用于确定插入符号的位置。文本组件中给定Element
的View
负责实现viewToModel(...)
方法BasicPasswordFieldUI使用:
BasicTextFieldUI使用:
如您所见,每个组件使用不同的
View
我想
PasswordView
是一个更容易实现的View
,因为所有字符都是相同的我不知道如何修改
FieldView
以返回您想要的功能我想您可以重写
JTextField
的viewToModel(...)
方法,只使用x值而忽略MouseEvent的y值。然后根据FontMetrics,您应该能够计算单击了哪个角色