2013-08-23 52 views
1

我目前正在嘗試使用MouseListeners實現使用未修飾的JFrame對窗口進行大小調整。以下是我實現調整JFrame東側的示例。調整JFrame的西側java

sizeXsizeY是從程序的初始化部分取得的幀的當前大小。 bg是我的內容窗格中唯一的元素。我用frame.pack()

public void mouseMoved(MouseEvent e){ 
     if((sizeX - 2) <= e.getX()){ 
      changeCursor(new Cursor(Cursor.E_RESIZE_CURSOR), true); 
     }else{ 
      changeCursor(new Cursor(Cursor.DEFAULT_CURSOR), false); 
     } 

     printInfo("Moved", e); 
    } 
    public void mouseDragged(MouseEvent e){ 
     if(sizeX < e.getX() || 
       sizeX > e.getX()){ 
      resizeXE(e); 
     } 
     printInfo("Dragged", e); 
    } 
    void changeCursor(Cursor cursor, boolean resize){ 
     if(resize){ 
      resizeFlag = true; 
     }else{ 
      resizeFlag = false; 
     } 
     bg.setCursor(cursor); 
    } 
    void resizeXE(MouseEvent e){ 
     if(resizeFlag){ 
      sizeX = e.getX(); 
      ((JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, bg)).setSize(
        sizeX, sizeY); 
     } 
    } 

我需要幫助,試圖實施西側的大小調整。我相信如果我弄明白這一點,我可能不會需要在南北兩側提供幫助。

正如您所看到的,我正在嘗試使用setSize()方法調整大小。但是我不明白我在西側如何使用它。任何建議的替代品?

回答

3

正如你可以看到我試圖調整使用setSize()方法。

當調整在西部,你需要使用:

  1. setLocation(...) - 由於框架移動到一個新的地方的邊緣
  2. 的setSize(...) - 因爲尺寸也增加。
+0

有道理。我實際上是在避免這樣做,但現在我會嘗試。 – kir

+0

我已經完成了它,但它太.. .. twitchy。與西部相比,東部的調整更爲順暢。這顯然是由'setLocation'造成的。是否有可能使其調整更清潔? – kir

+0

@ user2280704,請參閱[調整組件大小](http://tips4java.wordpress.com/2009/09/13/resizing-components/)。它會比你更復雜,因爲它支持其他功能,如貼緊,但如果仔細查看代碼,它可能會給你一些想法。 – camickr