2017-06-18 50 views
0

我們遇到了一些流行的網站登錄屏幕,在用戶名文本框中寫了一個淡灰色的用戶名。我不知道可以在java swing中實現嗎?jTextField中的Fantom文本。怎麼樣?

我有理論,通過mouseEvents實現。無法弄清楚如何去。

+0

避開鼠標事件,因爲文本組件可以通過多種方式訪問​​,包括Tab鍵。也許FocusListener是你想要的。 –

回答

2

退房Text Prompt

它允許您顯示文本和/或圖標作爲使用文本字段的提示。一旦任何字符輸入到文本字段中,提示將被刪除。

顯示的提示時,您還可以控制:

  1. ALWAYS - 顯示的提示文本字段是否具有焦點與否。
  2. FOCUS_GAINED - 當文本字段獲得焦點顯示的提示(和丟失焦點時是隱藏的)
  3. FOCUS_LOST - 顯示的提示當文本字段失去焦點(並在獲得焦點時是隱藏的)
2

方式一:

  • 創建一個類,讓在JTextField的幻象文本啓動
  • 設置文本的前景,以淺色
  • 使用的FocusListener,一個將選擇所有幻影文本,並將前景更改爲默認顏色(設置爲空)。

例如:

import java.awt.Color; 
import java.awt.GridLayout; 
import java.awt.event.FocusAdapter; 
import java.awt.event.FocusEvent; 

import javax.swing.*; 

@SuppressWarnings("serial") 
public class FantomTextFieldTest extends JPanel { 
    FantomTextField fantomTextField = new FantomTextField("Fantom Text"); 

    public FantomTextFieldTest() { 
     setLayout(new GridLayout(1, 0, 5, 0)); 
     add(new JTextField(20)); 
     add(fantomTextField.getTextField()); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 

    private static void createAndShowGui() { 
     FantomTextFieldTest mainPanel = new FantomTextFieldTest(); 
     JFrame frame = new JFrame("FantomTextFieldTest"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 
} 

class FantomTextField { 
    private static final Color FANTOM_FG = new Color(150, 150, 150, 150); 
    private JTextField textField; 
    private String fantomText; 
    private boolean showFantomText = true; 

    public FantomTextField(String fantomText) { 
     this.fantomText = fantomText; 
     textField = new JTextField(); 
     textField.setText(fantomText); 
     textField.setForeground(FANTOM_FG); 
     textField.addFocusListener(new FtfFocusListener()); 
    } 

    public FantomTextField(String fantomText, int columns) { 
     this(fantomText); 
     textField.setColumns(columns); 
    } 

    public JTextField getTextField() { 
     return textField; 
    } 

    public String getFantomText() { 
     return fantomText; 
    } 

    public void setFantomText(String fantomText) { 
     this.fantomText = fantomText; 
     textField.setText(fantomText); 
     textField.setForeground(FANTOM_FG); 
     showFantomText = true; 
    } 

    private class FtfFocusListener extends FocusAdapter { 
     @Override 
     public void focusGained(FocusEvent e) { 
      if (showFantomText) { 
       textField.selectAll(); 
       textField.setForeground(null); 
       showFantomText = false; 
      } 
     } 
    }  
}