我所试图做的仅仅是掷骰子,并有滚动骰子动画(只需显示随机骰子值,而滚动)我怎样做一个JPanel中一个简单的图形动画
到目前为止我的代码为模具:
import java.awt.*;
import javax.swing.*;
public class diePanel extends JPanel{
private int dieValue;
private boolean onHold=false;
private int pNum;
public diePanel(){
super();
}
public void setPlayerNumber(int pNum){
this.pNum=pNum;
}
public void setDieValue(int dieValue){
this.dieValue=dieValue;
}
public int checkDieValue(){
return dieValue;
}
public void roll(){
dieValue=(int) ((Math.random()*6)+1);
repaint();
}
public void changeOnHold(){
onHold=!onHold;
}
public void unHold(){
onHold=false;
}
public boolean checkOnHold(){
return onHold;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.setSize(50,50);
this.setVisible(true);
if(pNum==1){
if(dieValue==1){
if(onHold==false){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillOval(23,23,5,5);
}
else if(dieValue==2){
if(onHold==false){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
}
else if(dieValue==3){
if(onHold==false){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==4){
if(onHold==false){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
}
else if(dieValue==5){
if(onHold==false){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==6){
if(onHold==false){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.black);
}
else{
g.setColor(Color.white);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(7,23,5,5);
g.fillOval(38,23,5,5);
}
}
if(pNum==2){
if(dieValue==1){
if(onHold==false){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillOval(23,23,5,5);
}
else if(dieValue==2){
if(onHold==false){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
}
else if(dieValue==3){
if(onHold==false){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==4){
if(onHold==false){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
}
else if(dieValue==5){
if(onHold==false){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==6){
if(onHold==false){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.blue);
}
else{
g.setColor(Color.green);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(7,23,5,5);
g.fillOval(38,23,5,5);
}
}
if(pNum==3){
if(dieValue==1){
if(onHold==false){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillOval(23,23,5,5);
}
else if(dieValue==2){
if(onHold==false){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
}
else if(dieValue==3){
if(onHold==false){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==4){
if(onHold==false){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
}
else if(dieValue==5){
if(onHold==false){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==6){
if(onHold==false){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.pink);
}
else{
g.setColor(Color.orange);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(7,23,5,5);
g.fillOval(38,23,5,5);
}
}
if(pNum==4){
if(dieValue==1){
if(onHold==false){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillOval(23,23,5,5);
}
else if(dieValue==2){
if(onHold==false){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
}
else if(dieValue==3){
if(onHold==false){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==4){
if(onHold==false){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
}
else if(dieValue==5){
if(onHold==false){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(23,23,5,5);
}
else if(dieValue==6){
if(onHold==false){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillRoundRect(0, 0, 50, 50, 10, 10);
if(onHold==true){
g.setColor(Color.red);
}
else{
g.setColor(Color.gray);
}
g.fillOval(7,7,5,5);
g.fillOval(38,38,5,5);
g.fillOval(7,38,5,5);
g.fillOval(38,7,5,5);
g.fillOval(7,23,5,5);
g.fillOval(38,23,5,5);
}
}
}
}
如果我在帧呼吁卷:
for(int i=0;i<numDice;i++){
die[i].setPlayerNumber(cPlayer+1);
if(die[i].checkOnHold()==false){
for(int i2=0;i2<100;i2++){
die[i].roll();
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaint();
}
}
}
使用重绘()仅仅是导致按下按钮被推迟
任何帮助,将不胜感激
谢谢
谢谢你对此的帮助。为了回应您对我的代码的担忧,我只发布了适用的部分,并且我没有显示更多的代码。我没有使用布局管理器,因为我遇到了一些麻烦,我使用setBounds()而不是setSize等。 –
但是你不应该在任何paint方法中做,它会消耗你的CPU – MadProgrammer