Ajuda, imagem de fundo em um JTextField

4 respostas
D

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.

4 Respostas

G

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

}
R

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á!

O

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

E

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í.

Criado 9 de janeiro de 2008
Ultima resposta 14 de out. de 2012
Respostas 4
Participantes 5