日期:2014-05-20  浏览次数:20783 次

Java绘图及面板放置的问题
做一个类似于俄罗斯方块+五子棋的游戏

用java   swing,application  
1.想在指定的面板pa上绘制图片   (写的代码见下)
同时,想把这个pa添加到p1上,p1的布局管理器是GridLayout(8,8)想把pa添加到p1的第1行第2列的方格中,p1.add(pa,1,2)不行,说没有这种构造方法  

2.pz是个正方形小面板,放置在正方形p4上(p4比pz大),想让pz在p4上居中,并且右键单击p4所在的大正方形范围内时(这时单击pz,p4会有反应么?),让pz绕其中心顺时针转90°,左键单击p4所在的大正方形范围内时,让pz绕其中心逆时针转90°


3.还有,我想设一个二维数组kind[7][4]放置俄罗斯方块的7种形状及其4种不同的方向,用坐标表示。比如,参考点(重心圆)坐标为(r,c),T字形的方块的4种方向表示为
(r-1,c),(r,c-1),(r,c),(r,c+1),//反T,下面的依次顺时针转90°
(r-1,c),(r,c),(r+1,c),(r,c+1),
(r,c-1),(r,c),(r,c+1),(r-1,c),
(r,c-1),(r-1,c),(r,c),(r-1,c);


代码:public   class   pain
{
Graphics   g=new   Graphics;

JPanel   pb=new   JPanel   pb;//棋盘底色小面板
setSize(l,l);
g.setColor(backGroundColor);
g.fillOval((r-1)*l+l/2,(c-1)*l+l/2);
g.drawOval((r-1)*l+l/2,(c-1)*l+l/2);

JPanel   pp=new   JPanel   pp;//棋子颜色小面板
setSize(l,l);
g.setColor(piecesColor);
g.fillOval((r-1)*l+l/2,(c-1)*l+l/2);
g.drawOval((r-1)*l+l/2,(c-1)*l+l/2);


JPanel   pd=new   JPanel   pd;//不能走的棋子小面板
setSize(l,l);
g.setColor(disableColor);
g.fillOval((r-1)*l+l/2,(c-1)*l+l/2);
g.drawOval((r-1)*l+l/2,(c-1)*l+l/2);

painPanel1()
{ }  




painPanel4()//在p4上放面板(画棋子)
{

JPanel   pz=new   JPanel();//放在panel4上的面板

JPanel   pa=new   JPanel();//画小圆片的面板
pa.setSize(l,l);//l为正方形边长


if(kind[0]||kind[1])
{
pz.setSize(4*l,   4*l);
pz.setLayout(new   GridLayout(4,4));
//在pa上画重心圆
g.setColor(centerColor);
g.fillOval(l/2,l/2,l/2,l/2);
g.drawOval(l/2,l/2,l/2,l/2);
if(kind[0])   pz.add(pa,2,2);
else   pz.add(pa,3,1);
//在pa上画其他圆
g.setColor(piecesColor);
g.fillOval(l/2,l/2,l/2,l/2);
g.drawOval(l/2,l/2,l/2,l/2);
}

else
{
pz.setSize(2*c,   3*c);
pz.setLayout(new   GridLayout(2,3));
//在pa上画重心圆
g.setColor(centerColor);
g.fillOval(l/2,l/2,l/2,l/2);
g.drawOval(l/2,l/2,l/2,l/2);
}


------解决方案--------------------
abcg21_21() ( ) 信誉:100 Blog 加为好友 2007-4-21 16:40:39 得分: 0



还有就是如何获得面板大小?
--------------------
Component有
getWidth()
getHeight()方法