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