我自己写的JFrame中通过this.setUndecorated(true);把标题栏给去了,现在想实现窗体的拉伸,就是把鼠标放在窗体的边上,就能任意的拉伸窗体;请问如何实现???

解决方案 »

  1.   

    通过鼠标的监听实现,当打到边界的某个范围之内(这个你自己设置),将鼠标的形状设置为Resize状态,通过Drag事件设置frame的size
      

  2.   

    Arthur(亚瑟王),你回答了我好多问题啊,先谢了!
    能把你上面的话说的详细点吗???我有点不理解,因为我的JFrame的contentPane = this.getContentPane();
    contentPane上面就放了三个JPanel,你看怎么弄一下
      

  3.   

    import java.awt.Cursor;
    import java.awt.Dimension;
    import java.awt.Point;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;class SampleJFrame extends JFrame {
    public SampleJFrame() {
    setSize(320, 240);
    setUndecorated(true);
    setVisible(true); addMouseMotionListener(new MouseMotionAdapter() {
    boolean dragEnabled = false;
    Point oldPoint = null;
    Point newPoint = null;
    public void mouseMoved(MouseEvent e) {
    Dimension ds = getSize();
    //这里仅写了向东拉伸的状况,一共是8个方向,其中向四角拉伸应放在前面判断
    if(ds.width - e.getX() > 0 && ds.width - e.getX() <= 5){
    setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else {
    setCursor(Cursor.getDefaultCursor());
    dragEnabled = false;
    }
    }

    public void mouseDragged(MouseEvent e) {
    //这里应该通过Curser的形状来判断,长宽是否都需要改变
    if(!dragEnabled){
    return;
    }
    oldPoint = newPoint;
    newPoint = e.getPoint();

    setSize(new Dimension(getSize().width + newPoint.x - oldPoint.x,
    getSize().height + newPoint.y - oldPoint.y));
    }
    });
    } public static void main(String[] args) {
    new SampleJFrame();
    }
    }
      

  4.   

    刚才忘记说了,千万注意边界值的问题,frame应该给一个最小的长宽,便于在Resize的时候进行边界值判断
      

  5.   

    左上角有不是0,0的吗? 还是说setLocation()不是0,0的?
      

  6.   

    我说的是setLocation()不是0,0的情况
      

  7.   

    这和0,0没有关系的,有取得是Size,又不是location
      

  8.   

    public void mouseMoved(MouseEvent e) {
    Dimension ds = getSize(); // 这里仅写了向东拉伸的状况,一共是8个方向,其中向四角拉伸应放在前面判断
    if ((ds.width - e.getX() > 0 && ds.width - e.getX() <= 3)
    && (ds.height - e.getY() > 0 && ds.height - e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if ((ds.width - e.getX() > 0 && ds.width - e.getX() <= 3)
    && (e.getY() > 0 && e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if ((e.getX() > 0 && e.getX() <= 3)
    && (e.getY() > 0 && e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if ((e.getX() > 0 && e.getX() <= 3)
    && (ds.height - e.getY() > 0 && ds.height - e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (e.getX() > 0 && e.getX() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (ds.width - e.getX() > 0 && ds.width - e.getX() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (ds.height - e.getY() > 0
    && ds.height - e.getY() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (e.getY() > 0 && e.getY() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else {
    setCursor(Cursor.getDefaultCursor());
    dragEnabled = false;
    }
    }
      

  9.   

    public void mouseMoved(MouseEvent e) {
    Dimension ds = getSize(); // 这里仅写了向东拉伸的状况,一共是8个方向,其中向四角拉伸应放在前面判断
    if ((ds.width - e.getX() > 0 && ds.width - e.getX() <= 3)
    && (ds.height - e.getY() > 0 && ds.height - e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if ((ds.width - e.getX() > 0 && ds.width - e.getX() <= 3)
    && (e.getY() > 0 && e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if ((e.getX() > 0 && e.getX() <= 3)
    && (e.getY() > 0 && e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if ((e.getX() > 0 && e.getX() <= 3)
    && (ds.height - e.getY() > 0 && ds.height - e.getY() <= 3)) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (e.getX() > 0 && e.getX() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (ds.width - e.getX() > 0 && ds.width - e.getX() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (ds.height - e.getY() > 0
    && ds.height - e.getY() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else if (e.getY() > 0 && e.getY() <= 3) {
    setCursor(Cursor
    .getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
    dragEnabled = true;
    newPoint = e.getPoint();
    } else {
    setCursor(Cursor.getDefaultCursor());
    dragEnabled = false;
    }
    }
      

  10.   

    给你提供个思路,觉得这样能好写,取得当前屏幕的截图,paint作为全屏window的背景,在组件的周围绘制边框,这样就不会涉及到整个界面组件的位置调整和绘制,拖拽时仅对边框缩放