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()方法