Quiero animar un JFrame para convertirse en un medio de tamaño cuando se presiona un botón en mi programa
Así que cuando se hace clic en el botón que tiene acceso al botón. A continuación, puede utilizar:
SwingUtilities.windowForComponent(theButton);
para obtener una referencia del marco.
Así que ahora cuando crea el ActionListener para el temporizador puede pasar en la ventana como un argumento para el ActionListener.
Editar:
La sugerencia de la ERM es simple y sencillo y fácil de usar en muchos casos (y probablemente la mejor solución en este caso).
Mi sugerencia es un poco más complicada pero le presentaba el método SwingUtilities que eventualmente le permitirá escribir más código reutilizable que podría ser utilizado por cualquier cuadro o diálogo que pueda crear.
Un ejemplo sencillo sería algo así como:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AnimationSSCCE extends JPanel
{
public AnimationSSCCE()
{
JButton button = new JButton("Start Animation");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JButton button = (JButton)e.getSource();
WindowAnimation wa = new WindowAnimation(
SwingUtilities.windowForComponent(button));
}
});
add(button);
}
class WindowAnimation implements ActionListener
{
private Window window;
private Timer timer;
public WindowAnimation(Window window)
{
this.window = window;
timer = new Timer(20, this);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e)
{
window.setSize(window.getWidth() - 5, window.getHeight() - 5);
// System.out.println(window.getBounds());
}
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("AnimationSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new AnimationSSCCE());
frame.setSize(500, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
Por supuesto que se desea detener el temporizador cuando el winow alcanza un cierto tamaño mínimo. Te dejaré ese código.
Pruebe 'frame.getWidth()' donde 'frame' es el JFrame al que se refiere. – fireshadow52