2009-03-07 52 views
2

我正在做一個像Java遊戲一樣的焦土(對於我的考試項目:D),但是我有這個問題。我正在繪製一個窗口(JFrame),將佈局設置爲BorderLayout,應用一個擴展的JPanel並封裝窗口,但是在打包之後,它在左邊界和下邊界處顯示一些擴展的空白區域。 爪哇Swing包裝窗口錯誤

這是我的主類:

                  
                    public class Main { 
    public static void main(String[] args) { 
     javax.swing.JFrame frame = new javax.swing.JFrame("game title"); 
     panel p = new panel(new java.awt.Dimension(512, 512)); 
     frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(new java.awt.BorderLayout()); 
     frame.getContentPane().add(p, java.awt.BorderLayout.CENTER); 
     frame.pack(); 
     frame.setResizable(false); 
     frame.setVisible(true); 
    } 
} 

                  
                

面板是我的JPanel類,它在構造函數中設置它的參數(512×512)優選的大小。我已經在Windows和Linux上測試了這一點,並且在兩處都有錯誤,並且白色差距的大小因操作系統而異。

這是我的面板類:

                  
                    class panel extends javax.swing.JPanel{ 
    panel(java.awt.Dimension size){ 
     setPreferredSize(size); 
    } 
    public void paint(java.awt.Graphics g){ 
     g.setColor(java.awt.Color.BLUE); 
     g.fillRect(0, 0, 512, 512); 
    } 
} 

                  
                

請幫幫忙!

+0

你沒有告訴我們你的面板類。它有什麼作用?構造函數的參數是做什麼的?你可以將問題簡化爲SSCCE嗎? http://www.sscce.org/ – 2009-03-07 11:10:38

+0

我沒有看到你提供的面板類的問題。你也可以通過在兩個地方硬編碼面板的首選尺寸來重複自己。不要這樣做! – 2009-03-07 11:29:07

+1

我有一個大小的變量與我用來設置rect的大小的窗口的大小,只是爲了簡單起見在這裏刪除它。 – Xunil 2009-03-07 11:32:39

回答

2

我通過刪除setResizable(false)來解決問題;

感謝您的幫助!

3

我試圖重現這個沒有你 panel 類(這需要一個更好的名字,應該至少使用首字母大寫命名):

                        
                          import javax.swing.*; 

public class Main { 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("game title"); 
     JPanel p = new JPanel(); 
     p.setPreferredSize(new java.awt.Dimension(512, 512)); 
     p.setBackground(java.awt.Color.BLUE); 
     frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(new java.awt.BorderLayout()); 
     frame.getContentPane().add(p, java.awt.BorderLayout.CENTER); 
     frame.pack(); 
     frame.setResizable(false); 
     frame.setVisible(true); 
    } 
} 

                        
                      

這在它產生的一個窗口,一個藍色的512×512面板沒有不同顏色的邊框。所以這個問題必須與你的課程有關。

3

SAUA,

這不是你問什麼,但從來沒有少......你不擺覆蓋 油漆 是很重要的;相反,您可以覆蓋 paintComponent

請參閱Sun的「風俗畫」教程: http://java.sun.com/docs/books/tutorial/uiswing/painting/

事實上,我強烈建議(考慮項目的選擇),你經歷了整個的Swing教程。這需要「一段時間」,但這是值得的。

乾杯。基思。

1

我查看了 setResizable() 的代碼,發現一切正常。只需在 this.pack() 之前放 this.setResizable(false)