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

3

我有一个框架,其中包含一些JTextFields,用户可以在其中插入一些值。 当窗口打开时,文本字段的灰色背景中已经写入了用户应该在该容器中写什么,例如“秒值”...

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


要保存用户编写的内容,只需使用getText()。要在用户书写时更改字体颜色,只需使用OnClick事件并更改颜色。 - SaintLike
这可能会有帮助:https://dev59.com/zGkv5IYBdhLWcg3wkBka#10507193 - Guillaume Polet
我会使用 FocusListener 而不是 OnClickListener,因为这样你可以轻松处理失去焦点的事件。 - Daniel Lerps
2个回答

3
为了改变颜色,你需要实现一个 FocusListener,并使用 setForeground() 来设置前景色。如果你想获取 JTextField 当前内容的字符串,可以通过向底层的 Document 添加 DocumentListener 实现。

以下代码作为示例(我使用蓝色和红色作为颜色,并将 tf 的文本值存储在字符串变量 content 中):
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接