我目前有一个JTextField
,在里面,我有默认文字。
我目前遇到的问题是让JTextField
工作ActionListener
。我已经为组件添加了一个动作侦听器,但是当我使用FocusListener
来检查焦点时,它不会给出任何输出/回复。
任何帮助将不胜感激。请向我提供一些我应该改变的示例代码,谢谢。
PS。我使用这个类作为另一个类的组件,所以在我写的另一个类中:
window.add(smartTextField);
package com.finn.multiweb;
import java.awt.Color;
import javax.swing.JTextField;
public class SmartText extends JTextField {
private static final long serialVersionUID = 1L;
JTextField textField = new JTextField();
String defaultText;
boolean hasDefaultText;
public SmartText() {
super();
hasDefaultText = false;
notFocused();
}
public SmartText(String defaultText) {
super(defaultText);
this.defaultText = defaultText;
hasDefaultText = true;
notFocused();
}
private void notFocused() {
super.setForeground(Color.GRAY);
if (hasDefaultText == true) {
super.setText(defaultText);
} else if (hasDefaultText == false) {
super.setText("");
}
}
private void isFocused() {
super.setForeground(Color.BLACK);
super.setText("");
}
private void focusGained(java.awt.event.FocusEvent evt) {
System.out.println("test");
}
}
答案 0 :(得分:0)
您尚未在字段中添加FocusListener
// You need to implement the FocusListener interface
public class SmartText extends JTextField implements FocusListener {
private static final long serialVersionUID = 1L;
JTextField textField = new JTextField();
String defaultText;
boolean hasDefaultText;
public SmartText() {
super();
hasDefaultText = false;
notFocused();
// Then register yourself as interested in focus events
addFocusListener(this);
}
public SmartText(String defaultText) {
super(defaultText);
this.defaultText = defaultText;
hasDefaultText = true;
notFocused();
// Then register yourself as interested in focus events
addFocusListener(this);
}
// Then implement the contract of the FocusListener interface
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
}
仔细阅读How to Write a Focus Listener了解更多详情
从代码的外观来看,您尝试在字段中添加“提示支持”,您可以考虑使用SwingLabs,SwingX库中的PromptSupport
来example
答案 1 :(得分:0)
您可以使用Text Prompt这是一个单独的类。
答案 2 :(得分:0)
要使用FocusListener接口并且为了监听键盘获得或失去焦点,从类创建的侦听器对象需要使用组件的addFocusListener()方法向组件注册。两个重要的方法focusGained(FocusEvent e)和void focusLost(FocusEvent e),它有助于找到哪个组件被聚焦。
通过适当的示例详细了解What is FocusListener Interface and How it Work和Validate Text Field Using FocusListener Interface in Java。