Java – swing horchen eine Aktion in einem Textfeld eines Formulars

Ich möchte ein Formular mit einem Textfeld entwickeln.
Beispiel:

Name SecondName 

Die Idee ist, dass jedes Textfeld ein Text wie folgt hat:

 Insert your name Insert your second name 

wenn Sie auf das erste Textfeld klicken, um Ihren Namen zu schreiben, muss der Text “Name einfügen” gelöscht werden … das gleiche muss für das zweite Textfeld (SecondName) geschehen.
Der Effekt muss sein:
Bildbeschreibung hier eingeben

Ich denke, dass ich nur eine Aktion auf dem Textfeld brauche, die aufwachen muss, wenn der Benutzer mit der Maus auf das Textfeld drückt, ist das möglich?
Vielen Dank

PromptSupport Sie sich PromptSupport in SwingLabs SwingX Library an

Beispielsweise

Eingabeaufforderungen

Wenn die Felder den Fokus haben, wird die “Eingabeaufforderung” ausgeblendet, aber Sie können dies steuern, so dass es angezeigt wird, bis der Benutzer etwas eingibt oder hervorhebt, wenn der Fokus erreicht ist.

 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); } } } 

Ich habe auch ein Beispiel für BuddySupport das Teil derselben API ist, mit der Sie eine andere Komponente mit einer Textkomponente “verbinden” können. Hier habe ich die klassische “Dateibrowser” -Kombination gemacht, aber ich “suche” Stilfelder immer so …

Sehen Sie sich Texteingabeaufforderung für eine einfache Lösung an, mit der Sie steuern können, wann der Text ein- und ausgeblendet wird, sowie die Schriftart / -farbe des Textes.

Es funktioniert mit normalen Textkomponenten. In seiner einfachsten Form benötigen Sie nur eine zusätzliche Codezeile:

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

siehe dieses Beispiel

 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); } } }); } }