2017-06-18 7 views
0

人気のあるサイトのログイン画面が表示されます。ここで、淡いグレーのユーザー名がユーザー名のテキストボックスに書き込まれます。私はこれがJavaのスイングで実装できるのだろうか?jTextFieldのファンタムテキスト。どうやって?

私には、mouseEventsによって実装される理論があります。方法を理解できませんでした。

+0

マウスのイベントがクリアされるのは、テキストコンポーネントにはタブ移動など、さまざまな方法でアクセスできるためです。おそらくFocusListenerがあなたの望むものです。 –

答えて

2

Text Promptをチェックしてください。

テキストフィールドの使用に関するプロンプトとして、テキストやアイコンを表示することができます。テキストフィールドに文字が入力されるとすぐにプロンプ​​トが削除されます。

プロンプトが表示されたときにも、制御することができます。

  1. ALWAYS - プロンプトは、テキストフィールドにフォーカスしたか否かが表示されます。
  2. FOCUS_GAINED - プロンプトが
  3. FOCUS_LOSTテキストフィールドがフォーカス時に表示される(フォーカスが失われたときに隠されている) - プロンプトがテキストフィールドがフォーカスを失った(とフォーカスを獲得したときに隠れている)場合に表示され
2

一つの方法:

  • でのJTextFieldファントムのテキストを与えるクラスを作成して起動
  • すべて選択されます光の色
  • 利用のFocusListener、1にテキストの前景色を設定します。ファントムのテキストは、フォアグラウンドをデフォルトの色(nullに設定)に変更します。たとえば、

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; 
      } 
     } 
    }  
} 
関連する問題