2009-03-07 74 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)