Java Swing How to - Shake JFrame








Question

We would like to know how to shake JFrame.

Answer

import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//  www .j a v  a 2 s  .  c  o  m
import javax.swing.JButton;
import javax.swing.JFrame;

public class Main extends JFrame {
  private JButton buzz = new JButton("BUZZ ME!!");

  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[]) {
    Main bFrame = new Main();
    bFrame.prepareGUI();
    bFrame.setVisible(true);

  }
}

class BuzzActionListener implements ActionListener {
  JFrame frame;
  Point currLocation;
  int iDisplaceXBy = 5;
  int iDisplaceYBy = -10;

  public BuzzActionListener(JFrame frame) {
    this.frame = frame;
  }

  @Override
  public void actionPerformed(ActionEvent evt) {
    currLocation = frame.getLocationOnScreen();

    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);
  }
}