我是向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