Java专注于JTextField

时间:2014-05-16 06:19:39

标签: java swing focus actionlistener jtextfield

我目前有一个JTextField,在里面,我有默认文字。 我目前遇到的问题是让JTextField工作ActionListener。我已经为组件添加了一个动作侦听器,但是当我使用FocusListener来检查焦点时,它不会给出任何输出/回复。

任何帮助将不胜感激。请向我提供一些我应该改变的示例代码,谢谢。

PS。我使用这个类作为另一个类的组件,所以在我写的另一个类中:

window.add(smartTextField);

SmartText.java

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");
        }
}

3 个答案:

答案 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库中的PromptSupportexample

答案 1 :(得分:0)

您可以使用Text Prompt这是一个单独的类。

答案 2 :(得分:0)

要使用FocusListener接口并且为了监听键盘获得或失去焦点,从类创建的侦听器对象需要使用组件的addFocusListener()方法向组件注册。两个重要的方法focusGained(FocusEvent e)和void focusLost(FocusEvent e),它有助于找到哪个组件被聚焦。

通过适当的示例详细了解What is FocusListener Interface and How it WorkValidate Text Field Using FocusListener Interface in Java