import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.plaf.*;
public class ToolWindow extends JWindow {
public ToolWindow() {
super();
initUI();
}
private void initUI() {
this.setSize(new Dimension(400, 300));
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(createCaptionBar(), BorderLayout.NORTH);
}
private JPanel createCaptionBar() {
return new CaptionBar();
}
static class CaptionBar extends JPanel implements MouseListener, MouseMotionListener {
private Point clickPoint=null;
private Point windowLocation=new Point();
public CaptionBar() {
this.setBorder(new CaptionBarBorder());
this.setMinimumSize(new Dimension(100, 22));
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void mousePressed(MouseEvent e) {
clickPoint = e.getPoint();
}
public void mouseDragged(MouseEvent e) {
Window w = SwingUtilities.getWindowAncestor(this);
w.getLocation(windowLocation).translate(e.getX()-clickPoint.x, e.getY()-clickPoint.y);
w.setLocation(windowLocation);
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {}
}
static class CaptionBarBorder extends AbstractBorder implements UIResource {
private static final Insets insets = new Insets(1, 3, 1, 2);
public void paintBorder(Component component, Graphics g, int i, int k, int l, int i1) {
g.translate(i, k);
g.setColor(UIManager.getColor("controlLtHighlight"));
g.drawLine(0, 0, l - 1, 0);
g.drawLine(0, 0, 0, i1 - 2);
g.setColor(UIManager.getColor("controlShadow"));
g.drawLine(0, i1 - 1, l - 1, i1 - 1);
g.translate(-i, -k);
}
public Insets getBorderInsets(Component component) {
return insets;
}
}
public static void main(String argv[]) {
try {
ToolWindow w = new ToolWindow();
w.setSize(600, 450);
w.setLocationRelativeTo(null);
w.setVisible(true);
}
catch(Exception e) {
e.printStackTrace();
}
}
}