可以编写一个将 FocusListener 附加到所需文本字段的单独类。焦点侦听器所做的就是在文本小部件获得焦点时调用 selectAll()。
public class SelectAllListener implements FocusListener {
private static INSTANCE = new SelectAllListener();
public void focusLost(FocusEvent e) { }
public void focusGained(FocusEvent e) {
if (e.getSource() instanceof JTextComponent) {
((JTextComponent)e.getSource()).selectAll();
}
};
public static void addSelectAllListener(JTextComponent tc) {
tc.addFocusListener(INSTANCE);
}
public static void removeSelectAllListener(JTextComponent tc) {
tc.removeFocusListener(INSTANCE);
}
}
通过接受 JTextComponent 作为参数,可以将此行为直接添加到 JTextArea、JPasswordField 和所有其他文本编辑组件。这也允许该类将全选添加到可编辑的组合框和 JSpinners,您对文本编辑器组件的控制可能会受到更多限制。可以添加方便的方法:
public static void addSelectAllListener(JSpinner spin) {
if (spin.getEditor() instanceof JTextComponent) {
addSelectAllListener((JTextComponent)spin.getEditor());
}
}
public static void addSelectAllListener(JComboBox combo) {
JComponent editor = combo.getEditor().getEditorComponent();
if (editor instanceof JTextComponent) {
addSelectAllListener((JTextComponent)editor);
}
}
此外,可能不需要删除侦听器方法,因为侦听器不包含对任何其他实例的外部引用,但可以添加它们以使代码审查更顺畅。