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

Java JTextField:更改前景色并保存内容,java,swing,jtextfield,foreground,Java,Swing,Jtextfield,Foreground,我有一个带有一些JTextFields的框架,供用户插入一些值。 当窗口打开时,文本字段以灰色写下用户应该在该容器中写的内容,如“秒值” 当用户开始在JTextFields中写入时,我想将这些字母的颜色(我认为是前景)更改为深色,并将用户写入的内容保存到字符串中。对于颜色更改,您必须实现一个FocusListener,它使用setForeground()设置前景。如果您想拥有JTextField的当前内容字符串,您可以使用底层文档的DocumentListener来实现这一点 以该代码为例(我使

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


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

对于颜色更改,您必须实现一个
FocusListener
,它使用
setForeground()设置前景
。如果您想拥有
JTextField
的当前内容字符串,您可以使用底层
文档的
DocumentListener
来实现这一点

以该代码为例(我使用蓝色和红色作为颜色,并将
tf
的文本值存储在
String
内容中):

下面是一个完整的工作示例:

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

另一种方法请参见。

要保存用户编写的内容,只需使用
getText()
要在用户写入时更改字体的颜色,只需使用
OnClick
事件并更改颜色。这可能会有所帮助:我将使用
FocusListener
而不是
OnClickListener
,因为这样也可以轻松处理焦点丢失事件。
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();
    }
}