package gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ShapedWindow extends JFrame implements WindowListener {
private static Point point = new Point();
public ShapedWindow() {
super("Test oval-shaped window");
this.setLayout(new BorderLayout());
JPanel p = new JPanel();
p.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
p.setBackground(Color.blue);
p.setPreferredSize(new Dimension(0, 20));
this.add(p, BorderLayout.NORTH);
this.addWindowListener(this);
this.setUndecorated(true);
final JPanel frame = p;
final JFrame frame1 = this;
frame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
point.x = e.getX();
point.y = e.getY();
}
});
frame.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Point p = frame1.getLocation();
frame1.setLocation(p.x + e.getX() - point.x, p.y + e.getY()
- point.y);
}
});
JPanel left = new JPanel();
left.setBackground(Color.blue);
left.setPreferredSize(new Dimension(5, 0));
left.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
left.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
point.x = e.getX();
point.y = e.getY();
}
});
left.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Dimension p1 = frame1.getSize();
Point p = frame1.getLocation();
frame1.setBounds(p.x - (point.x - e.getX()), p.y, p1.width
+ (point.x - e.getX()), p1.height);
RoundRectangle2D rr = new RoundRectangle2D.Float(0, 0, frame1
.getBounds().width, frame1.getBounds().height, 5, 5);
Rectangle2D r = new Rectangle2D.Float(0, 5,
frame1.getBounds().width, frame1.getBounds().height - 5);
// Create a new shape
Area shape = new Area(rr);
// Add shape to shape 2
shape.add(new Area(r));
// Subtract shape with shape 3
// shape.subtract(new Area(shape3));
// shape.intersect(new Area(shape4));
// shape.exclusiveOr(new Area(shape5));
com.sun.awt.AWTUtilities.setWindowShape(frame1, shape);
}
});
this.add(left, BorderLayout.WEST);
/*
* this.add(new JButton("test")); this.add(new JCheckBox("test"));
* this.add(new JRadioButton("test")); this.add(new JProgressBar(0,
* 100));
*/
this.setSize(new Dimension(800, 600));
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(false);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Window w = new ShapedWindow();
w.setVisible(true);
RoundRectangle2D rr = new RoundRectangle2D.Float(0, 0, w
.getBounds().width, w.getBounds().height, 5, 5);
Rectangle2D r = new Rectangle2D.Float(0, 5,
w.getBounds().width, w.getBounds().height - 5);
// Create a new shape
Area shape = new Area(rr);
// Add shape to shape 2
shape.add(new Area(r));
// Subtract shape with shape 3
// shape.subtract(new Area(shape3));
// shape.intersect(new Area(shape4));
// shape.exclusiveOr(new Area(shape5));
com.sun.awt.AWTUtilities.setWindowShape(w, shape);
}
});
}
@Override
public void windowActivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void windowOpened(WindowEvent arg0) {
// TODO Auto-generated method stub
}
}