Ola pessoal, estou com um problema, gostaria de usar uma pequena imagem no fundo de um JTextField alinhado a esquerda do campo, tentei fazer isso extendendo JTextField e sobreescrevendo o metodo paintComponent(Graphics g), mas tudo o que eu desenhar depois da chamda super.drawComponent(g); vai ser desenhada por cima do campo, ou seja, fica por cima de onde o usuario digita.
Então, por onde eu devo começar para customizar o meu JTextField, alem de botar imagem de fundo, preencher ele com degrade e coisas do tipo.
Ajuda, imagem de fundo em um JTextField
4 Respostas
Veja se esse exemplo do java2s serve para você.
Ele cria um textfield com uma imagem png por baixo que ele denominou de marca d´água.
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class WatermarkTextField extends JTextField {
BufferedImage img;
TexturePaint texture;
public WatermarkTextField(File file) {
super();
try {
img = ImageIO.read(file);
} catch (IOException e) {
e.printStackTrace();
}
Rectangle rect = new Rectangle(0, 0, img.getWidth(null), img.getHeight(null));
texture = new TexturePaint(img, rect);
setOpaque(false);
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(texture);
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField textfield = new WatermarkTextField(new File("waterMarkImage.png"));
textfield.setText("www.java2s.com");
frame.getContentPane().add(textfield);
frame.pack();
frame.setVisible(true);
}
}
Janeiro 24, 2008 - 16:10
Aproveitando o topico....
final ImageIcon imageIcon = new ImageIcon("C:\\Trisha.gif");
jTextArea1 = new javax.swing.JTextArea(){
Image image = imageIcon.getImage();
public void paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g.drawImage(image, 0, 0,(int)this.getSize().getWidth(),(int)this.getSize().getHeight(), this);
super.paint (g);
}
};
jTextArea1.setText("Hello");
jScrollPane1.setViewportView(jTextArea1);
eu fiz isso....
mas eu nao estou entendendo... se eu deixa com o "super.paint (g); " a imagem nao aparece
so aparece quando eu tiro!
outra.. pq eu nao concigo escrever por cima ?
eu queria imagem de fundo
se alguem puder me ajudar... !
grato desde já!
Pessoal alguém sabe como deixar essa imagem alinhada no canto direito sem repetir?
Eu queria usar ela em um campo de busca junto com a imagem de uma lupa.
No código que o Grinvon passou eu mudei isso:
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setPaint(texture);
g.fillRect(85, 0, getWidth(), getHeight());// g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}Só que quando eu maximizo a janela continua repetindo de 85 para frente. Têm como adaptar?
OBS: estou usando um png 20 X 20
Reveja o que o meétodo fillRect faz e preste bastante atenção especialmente para os dois últimos parametros. Se tiver ainda mais dificuldade posta aí.