2013-12-14 27 views
3

我想開發一個帶有文本字段的窗體。
例如:
Java - swing在窗體的文本字段中動作

Name 
SecondName 

的想法是,每一個文本字段有一個像文本中:

Insert your name 
Insert your second name 

當你點擊第一個文本字段寫下你的名字,文本「插入你的名字」必須被刪除...同樣的事情必須發生在第二部分nd文本字段(SecondName)。
的影響必須是這樣的:
enter image description here

我認爲我只是需要有醒來的時候上的文本字段鼠標用戶按下,這是可能的文本字段的行動?
謝謝

回答

8

看看PromptSupportSwingLabs SwingX Library

對於實例

Prompt fields

當字段有焦點, 「提示」 將被隱藏,但你可以控制這一點,直到用戶鍵入內容或獲得焦點時突出顯示。

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import org.jdesktop.swingx.prompt.BuddySupport; 
import org.jdesktop.swingx.prompt.PromptSupport; 

public class PromptSupportTest { 

    public static void main(String[] args) { 
     new PromptSupportTest(); 
    } 

    public PromptSupportTest() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      JTextField firstName = new JTextField(10); 
      PromptSupport.setPrompt("First Name", firstName); 
      PromptSupport.setFocusBehavior(PromptSupport.FocusBehavior.HIDE_PROMPT, firstName); 

      JTextField lastName = new JTextField(10); 
      PromptSupport.setPrompt("Last Name", lastName); 
      PromptSupport.setFocusBehavior(PromptSupport.FocusBehavior.HIDE_PROMPT, lastName); 

      JTextField picture = new JTextField(10); 
      PromptSupport.setPrompt("Picture", picture); 
      PromptSupport.setFocusBehavior(PromptSupport.FocusBehavior.HIDE_PROMPT, picture); 

      JButton browse = new JButton("..."); 
      browse.setMargin(new Insets(0, 0, 0, 0)); 
      browse.setContentAreaFilled(false); 
      browse.setFocusPainted(false); 
      browse.setFocusable(false); 
      browse.setOpaque(false); 
      // Add action listener to brose button to show JFileChooser... 

      BuddySupport.addRight(browse, picture); 

      setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      gbc.weightx = 1; 

      add(firstName, gbc); 
      add(lastName, gbc); 
      add(picture, gbc); 

      gbc.anchor = GridBagConstraints.CENTER; 
      add(new JButton("Ok"), gbc); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

    } 

} 

我也加入BuddySupport其中一個例子是一樣的API,它可以讓你的「好友」與文本組件另一個組件的一部分。在這裏,我已經做了經典的「文件瀏覽器」的組合,但我的「搜索」風格的領域,如這一切的時候...

+0

+1我只是要評論,舉一個例子:D好回答:)。其實他也可能對'BuddySupport'感興趣。 – nachokk

+0

@nachokk天啊!我愛'BuddySupport'! – MadProgrammer

+0

謝謝,但我不知道如何下載並安裝庫PromptSupport。我的意思是:我必須下載哪個jar文件?和我必須把這個文件?謝謝 –

1

看到這個例子

import java.awt.Color; 
import java.awt.Font; 
import java.awt.event.FocusAdapter; 
import java.awt.event.FocusEvent; 
import javax.swing.JTextField; 

public class HintTextField extends JTextField { 

    Font gainFont = new Font("Tahoma", Font.PLAIN, 11); 
    Font lostFont = new Font("Tahoma", Font.ITALIC, 11); 

    public HintTextField(final String hint) { 

    setText(hint); 
    setFont(lostFont); 
    setForeground(Color.GRAY); 

    this.addFocusListener(new FocusAdapter() { 

     @Override 
     public void focusGained(FocusEvent e) { 
     if (getText().equals(hint)) { 
      setText(""); 
      setFont(gainFont); 
     } else { 
      setText(getText()); 
      setFont(gainFont); 
     } 
     } 

     @Override 
     public void focusLost(FocusEvent e) { 
     if (getText().equals(hint)|| getText().length()==0) { 
      setText(hint); 
      setFont(lostFont); 
      setForeground(Color.GRAY); 
     } else { 
      setText(getText()); 
      setFont(gainFont); 
      setForeground(Color.BLACK); 
     } 
     } 
    }); 

    } 
} 
+1

如果以編程方式調用setText,會發生什麼情況? – MadProgrammer

5

Text Prompt看看了簡單的解決方案,可以讓您控制文本的顯示/隱藏時間以及文本的字體/顏色。

它將使用常規的文本組件。在其最簡單的形式,你只需要一個額外的代碼行:

JTextField firstName = new JTextField(10); 
TextPrompt tp = new TextPrompt("First Name", firstName); 
+0

感謝也以這種方式工作 –