2012-04-10 54 views
3

我是新增JPanel到JFrame,我需要一点帮助。在我创作的一堂课中,我画了一个大矩形。这个类是JPanel的一个子类。另一个类是JFrame的一个子类。当我创建该类的新JPanel对象时,该矩形显示在框架上,但比通常情况下小得多,并且它不在正确的位置。这是代码,有什么不对?JPanel添加事项

public void gameRender() { 

    if(dbImage == null) { 
     dbImage = createImage(dbWIDTH, dbHEIGHT); 
     if(dbImage == null) 
      return; 
    } 
    //else 
     dbg = dbImage.getGraphics(); 


    dbg.setColor(Color.white); 
    dbg.fillRect(0, 0, dbWIDTH, dbHEIGHT); 
    dbg.setColor(Color.black); 

这是一个方法的一部分,该方法在程序中的一个while循环中不断调用(如动画循环)。这是JPanel子类的一部分,这部分代码用于双缓冲。 dbWIDTH是500,dbHEIGHT是400.

此代码来自试图创建JPanel子类对象的JFrame子类(JPanel子类名为WalkAndJump3)。

wj = new WalkAndJump3(); 

    Container c = getContentPane(); 
    c.setLayout(new FlowLayout()); 

    c.add(wj); 

我试图做我在JPanel的子类没有通过重写的paintComponent和它没有工作,我也declar WalkAndJump3 WJ作为一个实例变量,以便第一行不应该是一个问题。怎么了?再次,问题是绘制的矩形太小而且不合适。

+1

为了更好地帮助越早,张贴[SSCCE(HTTP:// SSCCE。组织/)。 – 2012-04-10 06:21:19

回答

3

它很小,因为您将FlowLayout(c.setLayout(new FlowLayout()))作为面板的容器(Container c = getContentPane())布局。这意味着您添加到该容器中的所有组件都将“一个一个”对齐(实际上,这是一个流:),并将其最小大小作为默认值。在你的情况 - 最小尺寸几乎为零我猜。

有两种选择:
1.不是最好的 - 使用了setPreferredSize(尺寸),您的JPanel,迫使其扩张
2.良好的一个 - 用正确的布局上伸展整个容器的大小这样的面板:

c.setLayout(new BorderLayout()); 

这将帮助,但我强烈建议你阅读的Swing引入的布局如何在这里工作: http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html