JavaXWin.java Source code

Java tutorial

Introduction

Here is the source code for JavaXWin.java

Source

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.beans.PropertyVetoException;
import java.io.FileReader;

import javax.swing.DefaultDesktopManager;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
import javax.swing.event.MouseInputAdapter;

public class JavaXWin extends JFrame {
    protected int m_count;
    protected int m_tencount;
    protected int m_wmX, m_wmY;
    protected JButton m_newFrame;
    protected JDesktopPane m_desktop;
    protected WindowManager m_wm;
    protected JViewport viewport;

    public JavaXWin() {
        setTitle("JavaXWin");
        m_count = m_tencount = 0;
        m_desktop = new JDesktopPane();

        JScrollPane scroller = new JScrollPane();
        m_wm = new WindowManager(m_desktop);
        m_desktop.setDesktopManager(m_wm);
        m_desktop.add(m_wm.getWindowWatcher(), JLayeredPane.PALETTE_LAYER);
        m_wm.getWindowWatcher().setBounds(555, 5, 200, 150);

        viewport = new JViewport() {
            public void setViewPosition(Point p) {
                super.setViewPosition(p);
                m_wm.getWindowWatcher().setLocation(m_wm.getWindowWatcher().getX() + (getViewPosition().x - m_wmX),
                        m_wm.getWindowWatcher().getY() + (getViewPosition().y - m_wmY));
                m_wmX = getViewPosition().x;
                m_wmY = getViewPosition().y;
            }
        };
        viewport.setView(m_desktop);
        scroller.setViewport(viewport);

        ComponentAdapter ca = new ComponentAdapter() {
            JViewport view = viewport;

            public void componentResized(ComponentEvent e) {
                m_wm.getWindowWatcher().setLocation(
                        view.getViewPosition().x + view.getWidth() - m_wm.getWindowWatcher().getWidth() - 15,
                        view.getViewPosition().y + 5);
            }
        };
        viewport.addComponentListener(ca);

        m_newFrame = new JButton("New Frame");
        m_newFrame.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                newFrame();
            }
        });

        JPanel topPanel = new JPanel(true);
        topPanel.setLayout(new FlowLayout());

        getContentPane().setLayout(new BorderLayout());
        getContentPane().add("North", topPanel);
        getContentPane().add("Center", scroller);

        topPanel.add(m_newFrame);

        Dimension dim = getToolkit().getScreenSize();
        setSize(800, 600);
        setLocation(dim.width / 2 - getWidth() / 2, dim.height / 2 - getHeight() / 2);
        m_desktop.setPreferredSize(new Dimension(1600, 1200));
        setVisible(true);
        WindowListener l = new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        };
        addWindowListener(l);
    }

    public void newFrame() {
        JInternalFrame jif = new JInternalFrame("Frame " + m_count, true, true, true, true);
        jif.setBounds(20 * (m_count % 10) + m_tencount * 80, 20 * (m_count % 10), 200, 200);

        JTextArea text = new JTextArea();
        JScrollPane scroller = new JScrollPane();
        scroller.getViewport().add(text);
        try {
            FileReader fileStream = new FileReader("");
            text.read(fileStream, "JavaLinux.txt");
        } catch (Exception e) {
            text.setText("* Could not read JavaLinux.txt *");
        }
        jif.getContentPane().add(scroller);

        m_desktop.add(jif);
        try {
            jif.setSelected(true);
        } catch (PropertyVetoException pve) {
            System.out.println("Could not select " + jif.getTitle());
        }

        m_count++;
        if (m_count % 10 == 0) {
            if (m_tencount < 3)
                m_tencount++;
            else
                m_tencount = 0;
        }
    }

    public static void main(String[] args) {
        new JavaXWin();
    }
}

class WindowManager extends DefaultDesktopManager {
    protected WindowWatcher ww;

    public WindowManager(JDesktopPane desktop) {
        ww = new WindowWatcher(desktop);
    }

    public WindowWatcher getWindowWatcher() {
        return ww;
    }

    public void activateFrame(JInternalFrame f) {
        super.activateFrame(f);
        ww.repaint();
    }

    public void beginDraggingFrame(JComponent f) {
        super.beginDraggingFrame(f);
        ww.repaint();
    }

    public void beginResizingFrame(JComponent f, int direction) {
        super.beginResizingFrame(f, direction);
        ww.repaint();
    }

    public void closeFrame(JInternalFrame f) {
        super.closeFrame(f);
        ww.repaint();
    }

    public void deactivateFrame(JInternalFrame f) {
        super.deactivateFrame(f);
        ww.repaint();
    }

    public void deiconifyFrame(JInternalFrame f) {
        super.deiconifyFrame(f);
        ww.repaint();
    }

    public void dragFrame(JComponent f, int newX, int newY) {
        f.setLocation(newX, newY);
        ww.repaint();
    }

    public void endDraggingFrame(JComponent f) {
        super.endDraggingFrame(f);
        ww.repaint();
    }

    public void endResizingFrame(JComponent f) {
        super.endResizingFrame(f);
        ww.repaint();
    }

    public void iconifyFrame(JInternalFrame f) {
        super.iconifyFrame(f);
        ww.repaint();
    }

    public void maximizeFrame(JInternalFrame f) {
        super.maximizeFrame(f);
        ww.repaint();
    }

    public void minimizeFrame(JInternalFrame f) {
        super.minimizeFrame(f);
        ww.repaint();
    }

    public void openFrame(JInternalFrame f) {
        super.openFrame(f);
        ww.repaint();
    }

    public void resizeFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) {
        f.setBounds(newX, newY, newWidth, newHeight);
        ww.repaint();
    }

    public void setBoundsForFrame(JComponent f, int newX, int newY, int newWidth, int newHeight) {
        f.setBounds(newX, newY, newWidth, newHeight);
        ww.repaint();
    }
}

class WindowWatcher extends JPanel {
    protected static final Color C_UNSELECTED = new Color(123, 123, 123);
    protected static final Color C_SELECTED = new Color(243, 232, 165);
    protected static final Color C_BACKGROUND = new Color(5, 165, 165);
    protected static final Color C_WWATCHER = new Color(203, 226, 0);
    protected float m_widthratio, m_heightratio;
    protected int m_width, m_height, m_XDifference, m_YDifference;
    protected JDesktopPane m_desktop;
    protected NorthResizeEdge m_northResizer;
    protected SouthResizeEdge m_southResizer;
    protected EastResizeEdge m_eastResizer;
    protected WestResizeEdge m_westResizer;

    public WindowWatcher(JDesktopPane desktop) {
        m_desktop = desktop;
        setOpaque(true);

        m_northResizer = new NorthResizeEdge(this);
        m_southResizer = new SouthResizeEdge(this);
        m_eastResizer = new EastResizeEdge(this);
        m_westResizer = new WestResizeEdge(this);

        setLayout(new BorderLayout());
        add(m_northResizer, BorderLayout.NORTH);
        add(m_southResizer, BorderLayout.SOUTH);
        add(m_eastResizer, BorderLayout.EAST);
        add(m_westResizer, BorderLayout.WEST);

        MouseInputAdapter ma = new MouseInputAdapter() {
            public void mousePressed(MouseEvent e) {
                m_XDifference = e.getX();
                m_YDifference = e.getY();
            }

            public void mouseDragged(MouseEvent e) {
                int vx = 0;
                int vy = 0;
                if (m_desktop.getParent() instanceof JViewport) {
                    vx = ((JViewport) m_desktop.getParent()).getViewPosition().x;
                    vy = ((JViewport) m_desktop.getParent()).getViewPosition().y;
                }
                int w = m_desktop.getParent().getWidth();
                int h = m_desktop.getParent().getHeight();
                int x = getX();
                int y = getY();
                int ex = e.getX();
                int ey = e.getY();
                if ((ey + y > vy && ey + y < h + vy) && (ex + x > vx && ex + x < w + vx)) {
                    setLocation(ex - m_XDifference + x, ey - m_YDifference + y);
                } else if (!(ey + y > vy && ey + y < h + vy) && (ex + x > vx && ex + x < w + vx)) {
                    if (!(ey + y > vy) && ey + y < h + vy)
                        setLocation(ex - m_XDifference + x, vy - m_YDifference);
                    else if (ey + y > vy && !(ey + y < h + vy))
                        setLocation(ex - m_XDifference + x, (h + vy) - m_YDifference);
                } else if ((ey + y > vy && ey + y < h + vy) && !(ex + x > vx && ex + x < w + vx)) {
                    if (!(ex + x > vx) && ex + x < w + vx)
                        setLocation(vx - m_XDifference, ey - m_YDifference + y);
                    else if (ex + x > vx && !(ex + x < w))
                        setLocation((w + vx) - m_XDifference, ey - m_YDifference + y);
                } else if (!(ey + y > vy) && ey + y < h + vy && !(ex + x > vx) && ex + x < w + vx)
                    setLocation(vx - m_XDifference, vy - m_YDifference);
                else if (!(ey + y > vy) && ey + y < h + vy && ex + x > vx && !(ex + x < w + vx))
                    setLocation((w + vx) - m_XDifference, vy - m_YDifference);
                else if (ey + y > vy && !(ey + y < h + vy) && !(ex + x > vx) && ex + x < w + vx)
                    setLocation(vx - m_XDifference, (h + vy) - m_YDifference);
                else if (ey + y > vy && !(ey + y < h + vy) && ex + x > vx && !(ex + x < w + vx))
                    setLocation((w + vx) - m_XDifference, (h + vy) - m_YDifference);
            }

            public void mouseEntered(MouseEvent e) {
                setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
            }

            public void mouseExited(MouseEvent e) {
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            }
        };
        addMouseListener(ma);
        addMouseMotionListener(ma);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        m_height = getHeight();
        m_width = getWidth();
        g.setColor(C_BACKGROUND);
        g.fillRect(0, 0, m_width, m_height);
        Component[] components = m_desktop.getComponents();
        m_widthratio = ((float) m_desktop.getWidth()) / ((float) m_width);
        m_heightratio = ((float) m_desktop.getHeight()) / ((float) m_height);
        for (int i = components.length - 1; i > -1; i--) {
            if (components[i].isVisible()) {
                g.setColor(C_UNSELECTED);
                if (components[i] instanceof JInternalFrame) {
                    if (((JInternalFrame) components[i]).isSelected())
                        g.setColor(C_SELECTED);
                } else if (components[i] instanceof WindowWatcher)
                    g.setColor(C_WWATCHER);
                g.fillRect((int) (((float) components[i].getX()) / m_widthratio),
                        (int) (((float) components[i].getY()) / m_heightratio),
                        (int) (((float) components[i].getWidth()) / m_widthratio),
                        (int) (((float) components[i].getHeight()) / m_heightratio));
                g.setColor(Color.black);
                g.drawRect((int) (((float) components[i].getX()) / m_widthratio),
                        (int) (((float) components[i].getY()) / m_heightratio),
                        (int) (((float) components[i].getWidth()) / m_widthratio),
                        (int) (((float) components[i].getHeight()) / m_heightratio));
            }
        }
        g.drawLine(m_width / 2, 0, m_width / 2, m_height);
        g.drawLine(0, m_height / 2, m_width, m_height / 2);
    }
}

class EastResizeEdge extends JPanel implements MouseListener, MouseMotionListener {
    private int WIDTH = 3;
    private int MIN_WIDTH = 50;
    private boolean m_dragging;
    private JComponent m_resizeComponent;

    public EastResizeEdge(JComponent c) {
        m_resizeComponent = c;
        addMouseListener(this);
        addMouseMotionListener(this);
        setOpaque(true);
        setBackground(Color.black);
    }

    public Dimension getPreferredSize() {
        return new Dimension(WIDTH, m_resizeComponent.getHeight());
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mouseMoved(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
        m_dragging = false;
    }

    public void mouseDragged(MouseEvent e) {
        if (m_resizeComponent.getWidth() + e.getX() >= MIN_WIDTH)
            m_resizeComponent.setBounds(m_resizeComponent.getX(), m_resizeComponent.getY(),
                    m_resizeComponent.getWidth() + e.getX(), m_resizeComponent.getHeight());
        else
            m_resizeComponent.setBounds(m_resizeComponent.getX(), m_resizeComponent.getY(), MIN_WIDTH,
                    m_resizeComponent.getHeight());
        m_resizeComponent.validate();
    }

    public void mouseEntered(MouseEvent e) {
        if (!m_dragging)
            setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
    }

    public void mouseExited(MouseEvent e) {
        if (!m_dragging)
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }

    public void mousePressed(MouseEvent e) {
        //toFront();
        m_dragging = true;
    }
}

class NorthResizeEdge extends JPanel implements MouseListener, MouseMotionListener {
    private static final int NORTH = 0;
    private static final int NORTHEAST = 1;
    private static final int NORTHWEST = 2;
    private int CORNER = 10;
    private int HEIGHT = 3;
    private int MIN_WIDTH = 50;
    private int MIN_HEIGHT = 50;
    private int m_width, m_dragX, m_dragY, m_rightX, m_lowerY;
    private boolean m_dragging;
    private JComponent m_resizeComponent;
    private int m_mode;

    public NorthResizeEdge(JComponent c) {
        m_resizeComponent = c;
        addMouseListener(this);
        addMouseMotionListener(this);
        setOpaque(true);
        setBackground(Color.black);
    }

    public Dimension getPreferredSize() {
        return new Dimension(m_resizeComponent.getWidth(), HEIGHT);
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mouseMoved(MouseEvent e) {
        if (!m_dragging) {
            if (e.getX() < CORNER) {
                setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
            } else if (e.getX() > getWidth() - CORNER) {
                setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
            } else {
                setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
            }
        }
    }

    public void mouseReleased(MouseEvent e) {
        m_dragging = false;
    }

    public void mouseDragged(MouseEvent e) {
        int h = m_resizeComponent.getHeight();
        int w = m_resizeComponent.getWidth();
        int x = m_resizeComponent.getX();
        int y = m_resizeComponent.getY();
        int ex = e.getX();
        int ey = e.getY();
        switch (m_mode) {
        case NORTH:
            if (h - (ey - m_dragY) >= MIN_HEIGHT)
                m_resizeComponent.setBounds(x, y + (ey - m_dragY), w, h - (ey - m_dragY));
            else
                m_resizeComponent.setBounds(x, m_lowerY - MIN_HEIGHT, w, MIN_HEIGHT);
            break;
        case NORTHEAST:
            if (h - (ey - m_dragY) >= MIN_HEIGHT && w + (ex - (getWidth() - CORNER)) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x, y + (ey - m_dragY), w + (ex - (getWidth() - CORNER)),
                        h - (ey - m_dragY));
            else if (h - (ey - m_dragY) >= MIN_HEIGHT && !(w + (ex - (getWidth() - CORNER)) >= MIN_WIDTH))
                m_resizeComponent.setBounds(x, y + (ey - m_dragY), MIN_WIDTH, h - (ey - m_dragY));
            else if (!(h - (ey - m_dragY) >= MIN_HEIGHT) && w + (ex - (getWidth() - CORNER)) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x, m_lowerY - MIN_HEIGHT, w + (ex - (getWidth() - CORNER)), MIN_HEIGHT);
            else
                m_resizeComponent.setBounds(x, m_lowerY - MIN_HEIGHT, MIN_WIDTH, MIN_HEIGHT);
            break;
        case NORTHWEST:
            if (h - (ey - m_dragY) >= MIN_HEIGHT && w - (ex - m_dragX) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x + (ex - m_dragX), y + (ey - m_dragY), w - (ex - m_dragX),
                        h - (ey - m_dragY));
            else if (h - (ey - m_dragY) >= MIN_HEIGHT && !(w - (ex - m_dragX) >= MIN_WIDTH)) {
                if (x + MIN_WIDTH < m_rightX)
                    m_resizeComponent.setBounds(m_rightX - MIN_WIDTH, y + (ey - m_dragY), MIN_WIDTH,
                            h - (ey - m_dragY));
                else
                    m_resizeComponent.setBounds(x, y + (ey - m_dragY), w, h - (ey - m_dragY));
            } else if (!(h - (ey - m_dragY) >= MIN_HEIGHT) && w - (ex - m_dragX) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x + (ex - m_dragX), m_lowerY - MIN_HEIGHT, w - (ex - m_dragX),
                        MIN_HEIGHT);
            else
                m_resizeComponent.setBounds(m_rightX - MIN_WIDTH, m_lowerY - MIN_HEIGHT, MIN_WIDTH, MIN_HEIGHT);
            break;
        }
        m_rightX = x + w;
        m_resizeComponent.validate();
    }

    public void mouseEntered(MouseEvent e) {
        mouseMoved(e);
    }

    public void mouseExited(MouseEvent e) {
        if (!m_dragging)
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }

    public void mousePressed(MouseEvent e) {
        m_dragging = true;
        m_dragX = e.getX();
        m_dragY = e.getY();
        m_lowerY = m_resizeComponent.getY() + m_resizeComponent.getHeight();
        if (e.getX() < CORNER) {
            m_mode = NORTHWEST;
        } else if (e.getX() > getWidth() - CORNER) {
            m_mode = NORTHEAST;
        } else {
            m_mode = NORTH;
        }
    }
}

class SouthResizeEdge extends JPanel implements MouseListener, MouseMotionListener {
    private static final int SOUTH = 0;
    private static final int SOUTHEAST = 1;
    private static final int SOUTHWEST = 2;
    private int CORNER = 10;
    private int HEIGHT = 3;
    private int MIN_WIDTH = 50;
    private int MIN_HEIGHT = 50;
    private int m_width, m_dragX, m_dragY, m_rightX;
    private boolean m_dragging;
    private JComponent m_resizeComponent;
    private int m_mode;

    public SouthResizeEdge(JComponent c) {
        m_resizeComponent = c;
        addMouseListener(this);
        addMouseMotionListener(this);
        setOpaque(true);
        setBackground(Color.black);
    }

    public Dimension getPreferredSize() {
        return new Dimension(m_resizeComponent.getWidth(), HEIGHT);
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mouseMoved(MouseEvent e) {
        if (!m_dragging) {
            if (e.getX() < CORNER) {
                setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
            } else if (e.getX() > getWidth() - CORNER) {
                setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
            } else {
                setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
            }
        }
    }

    public void mouseReleased(MouseEvent e) {
        m_dragging = false;
    }

    public void mouseDragged(MouseEvent e) {
        int h = m_resizeComponent.getHeight();
        int w = m_resizeComponent.getWidth();
        int x = m_resizeComponent.getX();
        int y = m_resizeComponent.getY();
        int ex = e.getX();
        int ey = e.getY();
        switch (m_mode) {
        case SOUTH:
            if (h + (ey - m_dragY) >= MIN_HEIGHT)
                m_resizeComponent.setBounds(x, y, w, h + (ey - m_dragY));
            else
                m_resizeComponent.setBounds(x, y, w, MIN_HEIGHT);
            break;
        case SOUTHEAST:
            if (h + (ey - m_dragY) >= MIN_HEIGHT && w + (ex - (getWidth() - CORNER)) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x, y, w + (ex - (getWidth() - CORNER)), h + (ey - m_dragY));
            else if (h + (ey - m_dragY) >= MIN_HEIGHT && !(w + (ex - (getWidth() - CORNER)) >= MIN_WIDTH))
                m_resizeComponent.setBounds(x, y, MIN_WIDTH, h + (ey - m_dragY));
            else if (!(h + (ey - m_dragY) >= MIN_HEIGHT) && w + (ex - (getWidth() - CORNER)) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x, y, w + (ex - (getWidth() - CORNER)), MIN_HEIGHT);
            else
                m_resizeComponent.setBounds(x, y, MIN_WIDTH, MIN_HEIGHT);
            break;
        case SOUTHWEST:
            if (h + (ey - m_dragY) >= MIN_HEIGHT && w - (ex - m_dragX) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x + (ex - m_dragX), y, w - (ex - m_dragX), h + (ey - m_dragY));
            else if (h + (ey - m_dragY) >= MIN_HEIGHT && !(w - (ex - m_dragX) >= MIN_WIDTH)) {
                if (x + MIN_WIDTH < m_rightX)
                    m_resizeComponent.setBounds(m_rightX - MIN_WIDTH, y, MIN_WIDTH, h + (ey - m_dragY));
                else
                    m_resizeComponent.setBounds(x, y, w, h + (ey - m_dragY));
            } else if (!(h + (ey - m_dragY) >= MIN_HEIGHT) && w - (ex - m_dragX) >= MIN_WIDTH)
                m_resizeComponent.setBounds(x + (ex - m_dragX), y, w - (ex - m_dragX), MIN_HEIGHT);
            else
                m_resizeComponent.setBounds(m_rightX - MIN_WIDTH, y, MIN_WIDTH, MIN_HEIGHT);
            break;
        }
        m_rightX = x + w;
        m_resizeComponent.validate();
    }

    public void mouseEntered(MouseEvent e) {
        mouseMoved(e);
    }

    public void mouseExited(MouseEvent e) {
        if (!m_dragging)
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }

    public void mousePressed(MouseEvent e) {
        //toFront();
        m_dragging = true;
        m_dragX = e.getX();
        m_dragY = e.getY();
        if (e.getX() < CORNER) {
            m_mode = SOUTHWEST;
        } else if (e.getX() > getWidth() - CORNER) {
            m_mode = SOUTHEAST;
        } else {
            m_mode = SOUTH;
        }
    }
}

class WestResizeEdge extends JPanel implements MouseListener, MouseMotionListener {
    private int WIDTH = 3;
    private int MIN_WIDTH = 50;
    private int m_dragX, m_rightX;
    private boolean m_dragging;
    private JComponent m_resizeComponent;

    public WestResizeEdge(JComponent c) {
        m_resizeComponent = c;
        addMouseListener(this);
        addMouseMotionListener(this);
        setOpaque(true);
        setBackground(Color.black);
    }

    public Dimension getPreferredSize() {
        return new Dimension(WIDTH, m_resizeComponent.getHeight());
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mouseMoved(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
        m_dragging = false;
    }

    public void mouseDragged(MouseEvent e) {
        if (m_resizeComponent.getWidth() - (e.getX() - m_dragX) >= MIN_WIDTH)
            m_resizeComponent.setBounds(m_resizeComponent.getX() + (e.getX() - m_dragX), m_resizeComponent.getY(),
                    m_resizeComponent.getWidth() - (e.getX() - m_dragX), m_resizeComponent.getHeight());
        else if (m_resizeComponent.getX() + MIN_WIDTH < m_rightX)
            m_resizeComponent.setBounds(m_rightX - MIN_WIDTH, m_resizeComponent.getY(), MIN_WIDTH,
                    m_resizeComponent.getHeight());
        else
            m_resizeComponent.setBounds(m_resizeComponent.getX(), m_resizeComponent.getY(), MIN_WIDTH,
                    m_resizeComponent.getHeight());
        m_resizeComponent.validate();
    }

    public void mouseEntered(MouseEvent e) {
        if (!m_dragging)
            setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
    }

    public void mouseExited(MouseEvent e) {
        if (!m_dragging)
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }

    public void mousePressed(MouseEvent e) {
        //toFront();
        m_rightX = m_resizeComponent.getX() + m_resizeComponent.getWidth();
        m_dragging = true;
        m_dragX = e.getX();
    }
}