Guten Abend,
Ich habe mir gerade mal auf die schnelle ein Placeholder-Textfeld zusammengebaut....
Jetzt möchte ich gerne eure Meinung dazu hören, und noch eine Frage stellen. Wie kann ich die passende Höhe für mein Text ermitteln?
mfg. Dagobert
Ich habe mir gerade mal auf die schnelle ein Placeholder-Textfeld zusammengebaut....
Jetzt möchte ich gerne eure Meinung dazu hören, und noch eine Frage stellen. Wie kann ich die passende Höhe für mein Text ermitteln?
Java:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* Ein Textfeld mit einem Placeholder
* @author Dagobert
* @since 28.04.2012
* @version 1.0
*/
@SuppressWarnings("serial")
public class PlaceHolder extends JTextField implements FocusListener{
/**
* Der Text der angezeigt werden soll, wenn das Feld leer ist
*/
private String placeHolderText;
/**
* Die verschiedenen Farben
*/
private Color normale, placeHolder;
/**
* Ob der Placeholder gerade angezeigt wird
*/
private boolean placeholdervisible;
public PlaceHolder(String placeHolderText){
super(20);
normale = Color.black;
placeHolder = Color.gray;
setPlaceHolder(placeHolderText);
showPlaceHolder();
validate();
addFocusListener(this);
}
/**
* Setzt einen Placeholder-Text
* @param placeHolderText
*/
public void setPlaceHolder(final String placeHolderText){
this.placeHolderText = placeHolderText;
}
/**
* Zeigt den Placeholder an
*/
public void showPlaceHolder(){
placeholdervisible = true;
}
/**
* Versteckt den Placeholder
*/
public void hidePlaceHolder(){
placeholdervisible = false;
}
// Wenn der Placeholder sichtbar ist, und der Fokus erlangt wird, wird der Placeholder versteckt
@Override
public void focusGained(FocusEvent e) {
if(placeholdervisible)
hidePlaceHolder();
}
// Wenn der Text leer ist, und der Fokus verloren geht, dann soll der Text angezeigt werden
@Override
public void focusLost(FocusEvent e) {
if(getText().length() == 0)
showPlaceHolder();
}
// Zeichnet den Placeholder wenn er aktiv ist
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(normale);
if(placeholdervisible || getText().length() == 0){
g.setColor(placeHolder);
g.drawString(placeHolderText, 3, (getHeight()/2)+5);
}
}
public static void main(String arg[]){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
final PlaceHolder p = new PlaceHolder("TestPlaceHolder");
panel.add(p);
JButton b = new JButton("Abfragen");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println(p.getText());
}
});
panel.add(b);
panel.validate();
frame.add(panel);
frame.validate();
frame.pack();
frame.setVisible(true);
}
}
mfg. Dagobert