3

我有一个框架,其中有一些JTextFields供用户插入一些值。当窗口打开时,文本字段以灰色显示用户应在该容器中写入的内容,例如“以秒为单位的值”......

当用户开始在 中写入时,我想将这些字母的颜色(我认为它是前景)更改为深色JTextFields,并保存到String用户编写的内容中。

4

2 回答 2

3

对于颜色更改,您必须实现一个FocusListener将前景设置为setForeground(). 如果您想拥有当前内容的字符串,JTextField您可以使用DocumentListener底层的Document.

以这段代码为例(我使用蓝色和红色作为颜色并将 Text 值存储tfString内容中):

JTextField tf = new JTextFiedl();
tf.addFocusListener(new FocusListener()
{
    @Override
    public void focusGained(FocusEvent fe)
    {
        tf.setForeground(INACTIVE_COLOUR);
    }

    @Override
    public void focusLost(FocusEvent fe)
    {
        tf.setForeground(ACTIVE_COLOUR);
    }
});

一个完整的工作示例在这里:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TF
{
    private final Color ACTIVE_COLOUR = Color.BLUE;
    private final Color INACTIVE_COLOUR = Color.RED;

    private String content; //text of the text field is stored here

    private JTextField tf;
    private JTextField lbl;

    public TF()
    {
        JFrame mainFrame = new JFrame("Window");

        tf = new JTextField("Hint");
        lbl = new JTextField("click here to change focus");

        tf.setForeground(ACTIVE_COLOUR);

        setListeners();

        mainFrame.add(tf, BorderLayout.NORTH);
        mainFrame.add(lbl, BorderLayout.SOUTH);
        mainFrame.pack();
        mainFrame.setVisible(true);
    }

    private void setListeners()
    {
        tf.addFocusListener(new FocusListener()
        {
            @Override
            public void focusGained(FocusEvent fe)
            {
                tf.setForeground(INACTIVE_COLOUR);
            }

            @Override
            public void focusLost(FocusEvent fe)
            {
                tf.setForeground(ACTIVE_COLOUR);
            }
        });

        tf.getDocument().addDocumentListener(new DocumentListener()
        {
            @Override
            public void removeUpdate(DocumentEvent de)
            {
                content = tf.getText();
            }

            @Override
            public void insertUpdate(DocumentEvent de)
            {
                content = tf.getText();
            }

            @Override
            public void changedUpdate(DocumentEvent de)
            {
                content = tf.getText();
            }
        });
    }

    public static void main(String[] args)
    {
        TF tf = new TF();
    }
}
于 2013-05-29T11:35:12.973 回答
1

另一种方法见文本提示

于 2013-05-29T15:11:33.763 回答