2010-11-29 38 views
1

我的代碼:的JPanel不會調整

public MyConstructor() { 
    view = new JPanel(new GridLayout(3, 1)); 
    header = new JPanel(new GridLayout(2, 1));//2 ROWS 1 COLUMN 
    foot = new JLabel("Copyright..."); 
    content = new JPanel(); 
    info = new JLabel(""); 
    logo = new JLabel() { 

     BufferedImage img; 

     @Override 
     public void paint(Graphics g) { 
      try { 
       img = ImageIO.read(new File("logo.jpg")); 
      } catch (IOException e) { 
      } 
      g.drawImage(img, 0, 0, null); 
     } 
    }; 
    window.add(view); 
    header.add(logo); 
    header.add(info); 
    view.add(header); 
    view.add(content); 
    view.add(foot); 
    window.setLocation(width/2, 100); 
    window.setSize(width, height); 
    window.setPreferredSize(new Dimension(width, height)); 
    content.setSize(window.getWidth(), height-70); 
    content.setPreferredSize(new Dimension(window.getWidth(), height-70)); 
} 

「窗口」的框架...類是不延長JFrame的 我的類將是一個超類給別人,子類繼承公共內容JPanel。在我的超類中,我試圖設置GridLayout的3個部分的寬度和高度,標識和信息組件爲它們的高度加起來爲70 ...我設置了其他組件(視圖,標題,信息,標識),以便子類無法訪問它們...

當應用程序運行時,顯示登錄窗口,這將顯示並正確調整大小。一旦創建了其中一個子類的實例,則登錄窗口將隱藏,然後隱藏站點setVisible(false)

當顯示新窗口時,JFrame的大小正確,但頁眉,內容和頁腳是不是正確的尺寸。 我已經嘗試設置每個組件的大小和首選大小,但仍然無法正常工作......我也嘗試調用repaint並驗證/重新驗證

任何想法?

回答

1

這聽起來像你的設計可以改進。爲什麼這些變量需要是超類的屬性?爲什麼不只是有一個方法來構建你需要的面板和一個添加它們的構造函數,以便爲每個實例獲得新面板?

事實上,爲什麼不只是創建頁眉和頁腳類並重用它們,而不必爲了獲得相同的頁眉和頁腳而創建子類?

0

嘗試在將組件添加到容器之前設置首選大小,然後添加組件「自下而上」。否則,請嘗試撥打pack(),revalidate(),repaint()等來調整事情。

閱讀Layout Manager時,也沒有正確使用它們。

此外,搖擺吮吸。嘗試Netbeans,它使它更容易受影響。當您需要手動放置和調整事物時,它也會有很大的幫助。

+1

不要使用IDE來生成GUI。學習如何自己編寫代碼,以便學習Java而不是IDE。 – camickr 2010-11-29 16:51:08

+0

除非你討厭所有的Java,我也是如此,但出於某種原因,你只需要使用Swing:P – slezica 2010-11-29 18:15:37

1

爲什麼你重寫標籤來繪製圖像?

  1. 那就是setIcon()來的方法是什麼
  2. 你永遠不應該閱讀的風俗畫代碼的文件,因爲該方法被調用多次
  3. 風俗畫,在必要的時候,在做paintComponent()方法。