Pessoal, gostaria de saber se é possível eu personalizar um imageIcon, ou seja, vou carregar uma imagem existente e no centro dela gostaria de colocar um texto. Algo com uma imagem e um jlabel no centro dela, é possível ??
ImageIcon + JLabel
4 Respostas
Galera, consegui algo com o setIconTextGap da seguinte forma:
setIconTextGap(getIcon().getIconHeight() - 34);
Só que eu não consigo ajustar a altura do texto, alguém ja tentou fazer algo assim ??
mano vc ta usando netbeans? pra isso?
da uma olhada nesse código, eu fiz pra te mostrar, centralizo o texto do JTextField dentro do icone ao clicar no botão, a parte do código que você precisa deve ser o que coloquei dentro do ActionListener
package projeto;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Tela extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
private JButton botao;
private JTextField texto;
private JLabel imagem;
private ImageIcon image;
public Tela() {
botao = new JButton("ver");
texto = new JTextField("Veja");
image = new ImageIcon("imagem.png");
imagem = new JLabel();
add(botao);
add(texto);
add(imagem);
imagem.setIcon(image);
imagem.setHorizontalAlignment(getWidth()/2);
imagem.setVerticalAlignment(getHeight()/2);
texto.setBounds(0, 0, 100, 25);
botao.setBounds(100, 0, 100, 25);
imagem.setBounds(0, 25, 200, 175);
setPreferredSize(new Dimension(200, 200));
setLayout(null);
botao.addActionListener(this);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Tela");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new Tela());
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o.equals(botao)) {
imagem.setText(texto.getText());
imagem.setHorizontalTextPosition((int) CENTER_ALIGNMENT);
}
}
}
Voce podia carregar uma BufferedImage invés da ImageIcon pegar o Graphics desse objeto e usar o método drawString para desenhar o texto na imagem.
Depois voce pode criar uma ImageIcon a partir da BufferedImage ou então usar outro componente no lugar do JLabel como um JPanel sobreescrevendo o método paintComponent.