JPanel添加问题

3

我是第一次将JPanel添加到JFrame中,需要一些帮助。我创建了一个类,在这个类中绘制了一个大矩形。这个类是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。

这段代码来自JFrame子类,该子类试图创建一个JPanel子类的对象(JPanel子类名为WalkAndJump3)。

    wj = new WalkAndJump3();

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

    c.add( wj );

我尝试通过重写paintComponent方法来实现,就像在JPanel子类中所做的那样,但它并没有起作用。 我将WalkAndJump3 wj声明为实例变量,因此第一行不应该是问题。出了什么问题?再一次,问题在于绘制的矩形太小且位置不正确。


1
为了更快速地获得帮助,请发布一个 SSCCE - Andrew Thompson
1个回答

3

因为您在面板的容器(Container c = getContentPane())布局中使用了FlowLayout(c.setLayout(new FlowLayout())),所以该面板很小。这意味着您添加到该容器中的所有组件都将以它们的最小尺寸默认对齐"一个接一个"(实际上是一个流 :))。在您的情况下,最小尺寸几乎为零。

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

c.setLayout( new BorderLayout() );

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接