我所試圖做的僅僅是擲骰子,並有滾動骰子動畫(只需顯示隨機骰子值,而滾動)我怎樣做一個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