3

我是向 JFrame 添加 JPanel 的新手,我需要一点帮助。在我做的一堂课中,我画了一个大矩形。此类是 JPanel 的子类。另一个类是 JFrame 的子类。当我创建该类的新 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 );

我尝试通过覆盖paintComponent 来做我在JPanel 子类中所做的事情,但它不起作用,我确实将WalkAndJump3 wj 声明为实例变量,因此第一行不应该是问题。怎么了?同样,问题是绘制的矩形太小而且不合适。

4

1 回答 1

3

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

有两种选择:
1. 不是最好的一种 - 在 JPanel 上使用 setPreferredSize(Dimension) 来强制其扩展
2. 好的一种 - 使用适当的布局在整个容器大小上拉伸面板,如下所示:

c.setLayout( new BorderLayout() );

这会有所帮助,但我强烈建议您阅读 Swing 介绍,了解布局的工作原理:http: //docs.oracle.com/javase/tutorial/uiswing/layout/using.html

于 2012-04-10T11:07:51.803 回答