首页 文章

java swing JTextField设置PlaceHolder [重复]

提问于
浏览
17

这个问题在这里已有答案:

我创建了一个JTextField,现在我想在JTextField上设置占位符我不知道如何在JTextField上设置占位符?请帮助如何在JTextField上设置占位符文本

JTextField database=new JTextField("Enter Data Base Name");
database.setPreferredSize(database.getPreferredSize());
database.setText("");

这是我的代码到文本字段现在在该代码中我想设置占位符如何在该JTextField上设置占位符

4 回答

  • 9

    试试这堂课:

    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;
        }
    
    }
    
  • 24
    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");
            }
        }
        });
    
  • 8

    如果我理解了这个问题,Text Prompt显示了一种可以做到这一点的方法 .

  • 12

    如此简单的使用swingx jar就像这样

    JTextArea txtMSISDNList = new JTextArea();  
    PromptSupport.setPrompt("01197585960,01197585961", txtMSISDNList);
    

相关问题