sirve - evento cambiar tamaño ventana java
Cambio de tamaño automático del icono de JButton (3)
- Anular
paintComponent
- Dibuja la imagen directamente en su objeto
Graphics
Y al dibujar la imagen, proporcione los argumentos dimensionales getWidth()
y getHeight()
. Al hacer esto, el redimensionamiento se automatizará. Además, al redimensionar, querrá hacer un anti-aliasing para que la imagen no se pixele demasiado.
entonces tengo este JButtons al cual agrego íconos. Los iconos son demasiado grandes al principio, por lo que los cambio de tamaño de antemano, y funcionan bien. Excepto que cuando cambio el tamaño de la ventana, los JButton cambian de tamaño, pero no de Iconos, lo cual es problemático.
¿Hay alguna manera de tener un ícono que simplemente llene el JButton al que está conectado? Un poco de código para hacerlo más claro:
public JewelClass(){
setBackground (new Color (30,30,30));
addActionListener(this);
setLayout(new GridLayout());
ImageIcon icon = new ImageIcon(src/carre.jpg);
setIcon (resizeIcon(icon,60,60));
}
resizeIcon es una función personal, que toma un icono, un parámetro de ancho y un parámetro de altura, y devuelve un icono redimensionado (obviamente). Traté de cambiar el diseño, pero no cambia nada. Intenté obtener el ancho / alto del JButton, pero dado que todavía no existen cuando se agrega el ícono, no funciona.
¿Tendrían alguna idea de cómo superar esto? No tiene que ser un icono, siempre y cuando mi JButton esté lleno con la imagen que le doy, es increíble :)
¡Gracias!
Puede agregar un Componente-Oyente a ese Botón que al cambiar el tamaño cambia el tamaño de su Imagen en él
yourButton.addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent e) {
// ignore
}
@Override
public void componentResized(ComponentEvent e) {
resizeIcon(icon, yourButton.getWidth(), yourButton.getHeight());
}
@Override
public void componentMoved(ComponentEvent e) {
// ignore
}
@Override
public void componentHidden(ComponentEvent e) {
// ignore
}
});
¡Espero eso ayude!
en Swing puede agregar cualquier JComponent
al otro JComponent
, para Image
es JLabel
el mejor JComponent
, entonces ¿por qué no poner JLabel#setIcon()
en JButton
import java.awt.*;
import javax.swing.*;
public class ResizeIconInButton extends JFrame {
private static final long serialVersionUID = 1L;
public ResizeIconInButton() {
JButton myButton = new JButton();
myButton.setLayout(new BorderLayout());
myButton.add(new CustomComponents0());
add(myButton, BorderLayout.CENTER);
setPreferredSize(getPreferredSize());
setTitle("Resize Icon In Button");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
ResizeIconInButton main = new ResizeIconInButton();
}
};
javax.swing.SwingUtilities.invokeLater(r);
}
}
class CustomComponents0 extends JLabel {
private static final long serialVersionUID = 1L;
@Override
public Dimension getMinimumSize() {
return new Dimension(200, 100);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 200);
}
@Override
public void paintComponent(Graphics g) {
int margin = 10;
Dimension dim = getSize();
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
}
}
EDITAR:
import java.awt.*;
import javax.swing.*;
public class ResizeIconInButton extends JFrame {
private static final long serialVersionUID = 1L;
private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg";
private JButton myButton = new JButton();
private JLabel myLabel = new JLabel();
public ResizeIconInButton() {
Icon myIcon = new ImageIcon(IMAGE_PATH);
myLabel.setIcon(myIcon);
myButton.setLayout(new BorderLayout());
myButton.add(myLabel);
add(myButton, BorderLayout.CENTER);
setPreferredSize(new Dimension(200, 100));
setTitle("Resize Icon In Button");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ResizeIconInButton main = new ResizeIconInButton();
}
});
}
}