Java JFrame简单应用程序
我正在努力创造一个游戏的乐趣,基本上是一个简单的代表进化 基本上,当我点击移动的球时,它会改变颜色。目标是不断改变,直到它与背景颜色匹配,这意味着球成功隐藏。最后,我会添加更多的球,但我正试图找出如何改变鼠标点击它的颜色。到目前为止,我已经创建了移动球动画 单击球时如何更改球的颜色 代码:Java JFrame简单应用程序,java,swing,timer,jpanel,paintcomponent,Java,Swing,Timer,Jpanel,Paintcomponent,我正在努力创造一个游戏的乐趣,基本上是一个简单的代表进化 基本上,当我点击移动的球时,它会改变颜色。目标是不断改变,直到它与背景颜色匹配,这意味着球成功隐藏。最后,我会添加更多的球,但我正试图找出如何改变鼠标点击它的颜色。到目前为止,我已经创建了移动球动画 单击球时如何更改球的颜色 代码: 公共类进化颜色 { 公共静态void main(字符串参数[]) { JFrame=新JFrame(“弹跳球”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_
公共类进化颜色
{
公共静态void main(字符串参数[])
{
JFrame=新JFrame(“弹跳球”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BallPanel bp=新的BallPanel();
帧。添加(bp);
frame.setSize(18001100);//设置帧大小
frame.setVisible(true);//显示帧
bp.立根背景(颜色:黄色);
}//末端总管
}
类BallPanel扩展JPanel实现ActionListener
{
专用int延迟=10;
保护定时器;
私有int x=0;//x位置
私有整数y=0;//y位置
私有整数半径=15;//球半径
私有int dx=2;//增量(x坐标)
private int dy=2;//增量(y坐标)
公共事务委员会()
{
定时器=新定时器(延迟,此);
timer.start();//启动计时器
}
已执行的公共无效操作(操作事件e)
//将在计时器启动时运行
{
重新油漆();
}
公共无效鼠标单击(鼠标事件arg0)
{
System.out.println(“点击了一下!”);
}
//绘制矩形和圆弧
公共组件(图形g)
{
super.paintComponent(g);//调用超类的paintComponent
g、 setColor(Color.red);
//检查边界
如果(xgetWidth()-radius)dx=-Math.abs(dx);
如果(ygetHeight()-radius)dy=-Math.abs(dy);
//调整球位
x+=dx;
y+=dy;
g、 圆角(x-半径,y-半径,半径*2,半径*2);
}
}
看一看
不要在paintComponent
中决定视图的状态,可以出于多种原因进行绘制,许多原因您无法控制。相反,在计时器的方法中执行操作
来做出这些决定
你也可以考虑稍微改变一下设计。与将球作为JPanel
s不同,您可以创建一个球的虚拟概念,其中包含它所需的所有属性和逻辑,并使用JPanel
来绘制它们。然后,您可以将它们存储在某种类型的列表中
,每次注册鼠标单击时,您可以迭代列表
,并检查是否单击了任何球
以查看为例查看
不要在paintComponent
中决定视图的状态,可以出于多种原因进行绘制,许多原因您无法控制。相反,在计时器的方法中执行操作
来做出这些决定
你也可以考虑稍微改变一下设计。与将球作为JPanel
s不同,您可以创建一个球的虚拟概念,其中包含它所需的所有属性和逻辑,并使用JPanel
来绘制它们。然后,您可以将它们存储在某种类型的列表中
,每次注册鼠标单击时,您可以迭代列表
,并检查是否单击了任何球
请看一个示例而不是硬编码颜色(g.setColor(color.red);
),为什么不创建一个属性:
g.setColor(currentColor);
然后,当您单击圆形区域时,更改currentColor
而不是硬编码颜色(g.setColor(color.red);
),为什么不创建一个属性:
g.setColor(currentColor);
然后,当您单击圆形区域时,更改currentColor
谢谢!我添加了鼠标侦听器并更改了颜色。这样,当它重新绘制画布时,它会改变颜色。谢谢!我添加了鼠标侦听器并更改了颜色。这样,当它重新绘制画布时,它会更改颜色。