Oii gente…
Queria saber se tem como, ao redimensionar um JButton comum, o tamanho da fonte do seu texto fosse redimensionado também… e não ficasse as reticencias, cortando a palavra :?
Um amigo me indicou esse link para eu usar como base, dai fiz o seguinte:
[code]
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class ResizeButtonFont extends JButton {
public static final int MIN_FONT_SIZE = 3;
public static final int MAX_FONT_SIZE = 200;
Graphics g;
public ResizeButtonFont(String text) {
super(text);
init();
}
protected void init() {
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
adaptLabelFont(ResizeButtonFont.this);
}
});
}
protected void adaptLabelFont(JButton button) {
if (g == null) {
return;
}
Component[] components = button.getComponents();
Rectangle r = button.getBounds();
int fontSize = MIN_FONT_SIZE;
Font f = button.getFont();
Rectangle r1 = new Rectangle();
Rectangle r2 = new Rectangle();
while (fontSize < MAX_FONT_SIZE) {
r1.setSize(getTextSize(button, f.deriveFont(f.getStyle(), fontSize)));
r2.setSize(getTextSize(button, f.deriveFont(f.getStyle(), fontSize + 1)));
if (r.contains(r1) && !r.contains(r2)) {
break;
}
fontSize++;
}
setFont(f.deriveFont(f.getStyle(), fontSize));
repaint();
}
private Dimension getTextSize(JButton button, Font f) {
Dimension size = new Dimension();
g.setFont(f);
FontMetrics fm = g.getFontMetrics(f);
size.width = (fm.stringWidth(button.getText()));
size.height = (fm.getHeight());
return size;
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
this.g = g;
}
public static void main(String[] args) throws Exception {
ResizeButtonFont label = new ResizeButtonFont("Hello World");
JFrame frame = new JFrame("Teste - fonte redimensionavel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(label);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}[/code]
a fonte altera o tamanho, conforme eu redimensiono o frame… só que ainda continua cortando a palavra
o que estou fazendo errado?