java swing JTextField设置PlaceHolder [重复]
Posted
技术标签:
【中文标题】java swing JTextField设置PlaceHolder [重复]【英文标题】:java swing JTextField set PlaceHolder [duplicate] 【发布时间】:2021-07-06 17:24:31 【问题描述】:我创建了一个 JTextField,现在我想在该 JTextField 上设置占位符,但我不知道怎么做?请帮忙。这是我的代码:
JTextField database=new JTextField("Enter Data Base Name");
database.setPreferredSize(database.getPreferredSize());
database.setText("");
【问题讨论】:
为了避免(我可能)误解占位符是“请输入文本”或图标在 JTextField 为空的情况下??? 占位符到底是什么意思?也许这个answer可以帮助你? 我编写了自己的组件。见这里:github.com/CollinAlpert/APIs/blob/master/javax/swing/… 【参考方案1】:试试这个课程:
package playground;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.Document;
@SuppressWarnings("serial")
public class PlaceholderTextField extends JTextField
public static void main(final String[] args)
final PlaceholderTextField tf = new PlaceholderTextField("");
tf.setColumns(20);
tf.setPlaceholder("All your base are belong to us!");
final Font f = tf.getFont();
tf.setFont(new Font(f.getName(), f.getStyle(), 30));
JOptionPane.showMessageDialog(null, tf);
private String placeholder;
public PlaceholderTextField()
public PlaceholderTextField(
final Document pDoc,
final String pText,
final int pColumns)
super(pDoc, pText, pColumns);
public PlaceholderTextField(final int pColumns)
super(pColumns);
public PlaceholderTextField(final String pText)
super(pText);
public PlaceholderTextField(final String pText, final int pColumns)
super(pText, pColumns);
public String getPlaceholder()
return placeholder;
@Override
protected void paintComponent(final Graphics pG)
super.paintComponent(pG);
if (placeholder == null || placeholder.length() == 0 || getText().length() > 0)
return;
final Graphics2D g = (Graphics2D) pG;
g.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(getDisabledTextColor());
g.drawString(placeholder, getInsets().left, pG.getFontMetrics()
.getMaxAscent() + getInsets().top);
public void setPlaceholder(final String s)
placeholder = s;
【讨论】:
感谢您快速重播亲爱的 我发现占位符文本的呈现看起来不太理想。基于this SO answer about text rendering,我添加了静态字段:private static Map<?, ?> hints = (Map<?, ?>) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
然后将设置渲染提示的行更改为if (hints != null) g.setRenderingHints(hints); else // set them directly as shown in the answer
【参考方案2】:
JTextField searchText;
...
在构造函数中:
searchText = new JTextField("Search");
searchText.setForeground(Color.GRAY);
searchText.addFocusListener(new FocusListener()
@Override
public void focusGained(FocusEvent e)
if (searchText.getText().equals("Search"))
searchText.setText("");
searchText.setForeground(Color.BLACK);
@Override
public void focusLost(FocusEvent e)
if (searchText.getText().isEmpty())
searchText.setForeground(Color.GRAY);
searchText.setText("Search");
);
【讨论】:
欢迎来到 Stack Overflow!通过提供一些围绕您的代码的上下文,这个答案可以变得更加有用。 当然,如果您输入文本“搜索”,然后单击返回该文本将消失的字段。 我喜欢这段代码,但文本只有在单击框后才可见,我之前也设置了文本来解决这个问题。有没有更好的办法? 我们只需要添加 searchText.setText("...");在 searchText = new JTextField("Search"); searchText.setForeground(Color.GRAY);【参考方案3】:使用swingx jar 就这么简单
JTextArea txtMSISDNList = new JTextArea();
PromptSupport.setPrompt("01197585960,01197585961", txtMSISDNList);
【讨论】:
这么简单的方法。非常感谢朋友。 你是最受欢迎的朋友。 您的链接已损坏。你有更新吗? 在这里下载jar文件:java2s.com/Code/Jar/s/Downloadswingx161jar.htm 不幸的是,swingx 不再处于开发阶段,因此使用风险自负(不确定它是否与 Java 8 兼容)。重要提示:无论 java2s.com 看起来多么值得信赖,永远不要从原始主页以外的任何地方下载 jar 文件(否则你永远不知道里面有什么!)!您仍然可以通过maven 获取jar(参见右侧的“下载”列)。【参考方案4】:如果我理解了这个问题,Text Prompt 会显示您可以做到这一点的一种方法。
【讨论】:
感谢亲爱的camickr快速重播以上是关于java swing JTextField设置PlaceHolder [重复]的主要内容,如果未能解决你的问题,请参考以下文章
将文件路径拖放到 Java Swing JTextField
java:限制swing中的JTextField只能输入中文,字母,数字。
java.swing JtextField 中怎么限制只能输入数字