ventana tamaño sirve setsize que posicion para evento como cambiar boton java swing resize jbutton imageicon

sirve - evento cambiar tamaño ventana java



Cambio de tamaño automático del icono de JButton (3)

  1. Anular paintComponent
  2. 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(); } }); } }