JTextField:更改前景色并保存内容

时间:2013-05-29 10:26:59

标签: java swing jtextfield foreground

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

当用户开始在JTextFields中书写时,我希望将这些字母的颜色(我认为它是前景)更改为黑暗,然后将String保存为{{1}}用户。

2 个答案:

答案 0 :(得分:3)

对于颜色更改,您必须实现FocusListener,将前景设置为setForeground()。如果您想拥有JTextField当前内容的字符串,则可以通过DocumentListener与基础Document实现此目标。

请参阅此代码作为示例(我使用蓝色和红色作为颜色,并在tf内容中存储String的文本值):

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

答案 1 :(得分:1)

有关其他方法,请参阅Text Prompt