Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.newbiehacker.nengine.mapeditor;
- import javax.swing.*;
- import javax.swing.border.LineBorder;
- import java.awt.*;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.event.MouseMotionListener;
- /**
- * @author newbiehacker
- */
- public class ToolWindow extends JWindow implements MouseListener, MouseMotionListener {
- private static enum DragMode {
- TOP, BOTTOM, RIGHT, LEFT
- }
- private static final int BORDER_WIDTH = 3;
- private int startX = -1, startY = -1, lastX = -1, lastY = -1;
- private DragMode dragMode;
- public ToolWindow(JFrame owner, String title, Component inside) {
- super(owner);
- final Color bg = new Color(102, 153, 255);
- ((JPanel) getContentPane()).setBorder(new LineBorder(bg, BORDER_WIDTH));
- JLabel t = new JLabel(title, JLabel.CENTER);
- getContentPane().setBackground(bg);
- t.setFont(t.getFont().deriveFont(Font.BOLD, 12));
- add(t, BorderLayout.NORTH);
- add(inside, BorderLayout.CENTER);
- addMouseListener(this);
- addMouseMotionListener(this);
- addMouseHandler(inside);
- setAlwaysOnTop(true);
- pack();
- }
- private void addMouseHandler(Component c) {
- c.addMouseMotionListener(this);
- if (c instanceof Container) {
- Container cont = (Container) c;
- for (Component c1 : cont.getComponents()) {
- addMouseHandler(c1);
- }
- }
- }
- public void mouseClicked(MouseEvent e) {
- }
- public void mousePressed(MouseEvent e) {
- Point mouse = e.getPoint();
- lastX = startX = mouse.x;
- lastY = startY = mouse.y;
- if (startX <= BORDER_WIDTH)
- dragMode = DragMode.LEFT;
- else if (startX >= getWidth() - BORDER_WIDTH)
- dragMode = DragMode.RIGHT;
- else if (startY <= BORDER_WIDTH)
- dragMode = DragMode.TOP;
- else if (startY >= getHeight() - BORDER_WIDTH)
- dragMode = DragMode.BOTTOM;
- }
- public void mouseReleased(MouseEvent e) {
- startX = startY = -1;
- dragMode = null;
- }
- public void mouseEntered(MouseEvent e) {
- }
- public void mouseExited(MouseEvent e) {
- }
- public void mouseDragged(MouseEvent e) {
- if (e.getSource() == this) {
- Point mouse = e.getPoint();
- Point p = getLocation();
- if(dragMode == null || dragMode == DragMode.LEFT || dragMode == DragMode.TOP)
- setLocation(p.x + mouse.x - startX, p.y + mouse.y - startY);
- if(dragMode == DragMode.LEFT)
- setSize(getWidth() + startX - mouse.x, getHeight());
- else if(dragMode == DragMode.RIGHT)
- setSize(getWidth() + mouse.x - lastX, getHeight());
- else if(dragMode == DragMode.TOP)
- setSize(getWidth(), getHeight() + startY - mouse.y);
- else if(dragMode == DragMode.BOTTOM)
- setSize(getWidth(), getHeight() + mouse.y - lastY);
- lastX = mouse.x;
- lastY = mouse.y;
- }
- }
- public void mouseMoved(MouseEvent e) {
- Point mouse = e.getLocationOnScreen();
- Point us = getLocationOnScreen();
- startX = e.getX();
- startY = e.getY();
- if (mouse.x <= us.x + BORDER_WIDTH)
- dragMode = DragMode.LEFT;
- else if (mouse.x >= us.x + getWidth() - BORDER_WIDTH)
- dragMode = DragMode.RIGHT;
- else if (mouse.y <= us.y + BORDER_WIDTH)
- dragMode = DragMode.TOP;
- else if (mouse.y >= us.y + getHeight() - BORDER_WIDTH)
- dragMode = DragMode.BOTTOM;
- else {
- dragMode = null;
- setCursor(Cursor.getDefaultCursor());
- }
- if (dragMode != null) {
- Cursor c = Cursor.getDefaultCursor();
- if (dragMode == DragMode.LEFT)
- c = new Cursor(Cursor.W_RESIZE_CURSOR);
- else if (dragMode == DragMode.RIGHT)
- c = new Cursor(Cursor.E_RESIZE_CURSOR);
- else if (dragMode == DragMode.TOP)
- c = new Cursor(Cursor.N_RESIZE_CURSOR);
- else if (dragMode == DragMode.BOTTOM)
- c = new Cursor(Cursor.S_RESIZE_CURSOR);
- setCursor(c);
- }
- }
- }
Add Comment
Please, Sign In to add comment