我想動畫一個JFrame變成一半大小的,當我在我的程序按一個按鈕
所以,當你點擊按鈕,您可以訪問按鈕。然後你可以使用:
SwingUtilities.windowForComponent(theButton);
獲得對幀的引用。
所以,現在當您爲Timer創建ActionListener時,您可以在Window中將其作爲ActionListener的參數傳遞。
編輯:
的建議通過MRE是簡單和直接的,容易在很多情況下使用(並可能在這種情況下,更好的解決方案)。
我的建議稍微複雜一些,但它向您介紹了SwingUtilities方法,它最終將允許您編寫更多可重用的代碼,這些代碼可能會被您可能創建的任何框架或對話框使用。
一個簡單的例子是這樣的:
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();
}
});
}
}
當然你想停止計時時winow達到一定的最小尺寸。我將把這些代碼留給你。
嘗試'frame.getWidth()'其中'frame'是您所指的JFrame。 – fireshadow52