java-JPanel添加问题

我是向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声明为实例变量,因此第一行应该不是问题.怎么了?同样,问题在于绘制的矩形太小且不合适.

解决方法:

它很小,因为您具有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

上一篇:c#泛型继承,而类类型被继承


下一篇:C# 异常捕获机制(Try Catch Finally)