I am trying to create a JTextField with an image and a tooltip. A text field function is a search field for searching for some books. Now I like to go a little further. I would like to give the image a function. For example, if I click on an image, the text in the text box should be cleared.
To achieve this implementation, I created a new class and extended it using JTextField.
This is the code:
public class JSearchTextField extends JTextField implements FocusListener { private static final long serialVersionUID = 1L; private String textWhenNotFocused; private Icon icon; private Insets dummyInsets; private JTextField dummy; public JSearchTextField() { super(); Border border = UIManager.getBorder("TextField.border"); dummy = new JTextField("Suchen..."); this.dummyInsets = border.getBorderInsets(dummy); icon = new ImageIcon(JSearchTextField.class.getResource("/images/clearsearch.png")); this.addFocusListener(this); } public JSearchTextField(String textWhenNotFocused) { this(); this.textWhenNotFocused = textWhenNotFocused; } public void setIcon(ImageIcon newIcon){ this.icon = newIcon; } public String getTextWhenNotFocused() { return this.textWhenNotFocused; } public void setTextWhenNotFocused(String newText) { this.textWhenNotFocused = newText; } public void paintComponent(Graphics g){ super.paintComponent(g); int textX = 2; if(!this.hasFocus() && this.getText().equals("")) { int height = this.getHeight(); Font prev = this.getFont(); Font italic = prev.deriveFont(Font.ITALIC); Color prevColor = g.getColor(); g.setFont(italic); g.setColor(UIManager.getColor("textInactiveText")); int h = g.getFontMetrics().getHeight(); int textBottom = (height - h) / 2 + h - 4; int x = this.getInsets().left; Graphics2D g2d = (Graphics2D) g; RenderingHints hints = g2d.getRenderingHints(); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.drawString(textWhenNotFocused, x, textBottom); g2d.setRenderingHints(hints); g.setFont(prev); g.setColor(prevColor); } else { int iconWidth = icon.getIconWidth(); int iconHeight = icon.getIconHeight(); int x = dummy.getWidth() + dummyInsets.right; textX = x - 420; int y = (this.getHeight() - iconHeight)/2; icon.paintIcon(this, g, x, y); } setMargin(new Insets(2, textX, 2, 2)); } @Override public void focusGained(FocusEvent arg0) { this.repaint(); } @Override public void focusLost(FocusEvent arg0) { this.repaint(); }
}
And here I create the fields;
txtSearchBooks = new JSearchTextField("Buch suchen...");
Now back to my question. Do you know how I can give an image a function where the text will be automatically cleared? I tried to implement MouseListener and set the text "txtSearchBooks" to zero, but it did not work.
I hope I didnโt go in the wrong direction.
Sorry for the long post, but I am very grateful for the advice.
source share