BUZZのようなJFrameをアニメーション化するライブラリやその他のものがあるかどうか知りたいです!yahooメッセンジャーのアニメーション、それを行う既存のライブラリがない場合、それを行うための可能なアルゴリズムは何ですか?
質問する
6960 次
3 に答える
3
作業中のフレームに対して独自のバズメソッドを作成できます。以下のコードを見てください。
MadProgrammer とDavidKroukampによって提案されたように編集私は基準を満たすためにコードを変更しました。:)
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
class BuzzFrame extends JFrame
{
private JButton buzz = new JButton("BUZZ ME!!");
public BuzzFrame ()
{
super("BUZZ Frame!!");
}
public void prepareGUI()
{
buzz.addActionListener(new BuzzActionListener(this));
setSize(300,200);
getContentPane().add(buzz,BorderLayout.NORTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String st[])
{
SwingUtilities.invokeLater ( new Runnable()
{
@Override
public void run()
{
BuzzFrame bFrame = new BuzzFrame();
bFrame.prepareGUI();
bFrame.setVisible(true);
}
});
}
}
class BuzzActionListener implements ActionListener
{
private JFrame frame;
private Point currLocation;
private int iDisplaceXBy = 5;
private int iDisplaceYBy = -10;
public BuzzActionListener(JFrame frame)
{
this.frame = frame;
}
@Override
public void actionPerformed(ActionEvent evt)
{
currLocation = frame.getLocationOnScreen();
fireBuzzAction();
}
private void fireBuzzAction()
{
SwingUtilities.invokeLater ( new Runnable()
{
@Override
public void run()
{
Point position1 = new Point( currLocation.x + iDisplaceXBy , currLocation.y + iDisplaceYBy );
Point position2 = new Point( currLocation.x - iDisplaceXBy , currLocation.y - iDisplaceYBy );
for (int i = 0; i < 20 ; i++)
{
frame.setLocation(position1);
frame.setLocation(position2);
}
frame.setLocation(currLocation);
}
});
}
}
于 2013-01-23T20:37:58.987 に答える
2
于 2013-01-23T19:51:04.103 に答える