2013-04-25 89 views
0

截至目前,我正在努力创建一个JAVA版本的uno,我的老师称之为“单打”。目前,我只是试图找到一个可以移除卡片的工作套牌。重新绘制不更新?

虽然我现在的问题是,当我删除一张卡时,没有任何更新。它根本不重绘。我不知道为什么。

这是面板和框架类。

面板:

package singles; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import javax.swing.JPanel; 
import java.awt.event.MouseMotionListener; 
/** 
* 
* @author Xenorosth 
*/ 

public class CardPanel extends JPanel{ 
    private Card myCard; //To get information for card 
    //private static Deck myDeck = new Deck(); //Get a deck! 
    public CardPanel(Card myOtherCard){ 
     this.setSize(100,150); 
     this.setPreferredSize(new Dimension(100,150)); 
     myCard = myOtherCard; 
     //myCard = myDeck.getMainCard(0); 
    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.setColor(Color.black); //Set word drawings to black 

     if(myCard.isFlipped()){ 
      if(myCard.getColor() == "red"){ 
       this.setBackground(Color.red); 
       g.drawString(myCard.getValue(), 30, 30); 
      } 
      else if(myCard.getColor() == "green"){ 
       this.setBackground(Color.green); 
       g.drawString(myCard.getValue(), 30, 30); 
      } 
      else if(myCard.getColor() == "blue"){ 
       this.setBackground(Color.blue); 
       g.drawString(myCard.getValue(), 30, 30); 
      } 
      else if(myCard.getColor() == "yellow"){ 
       this.setBackground(Color.yellow); 
       g.drawString(myCard.getValue(), 30, 30); 
      } 
      else if(myCard.getColor() == "black"){ 
      this.setBackground(Color.black); 
      g.setColor(Color.white); 
      g.drawString(myCard.getValue(), 30, 30); 
      g.setColor(Color.black);  
      } 
     } 
     else{ 
     this.setBackground(Color.black); 
     g.setColor(Color.white); 
     g.drawString("Singles", 30, 30); 
     g.setColor(Color.black); 

     } 


    } 

    /** 
    * @return the myCard 
    */ 
    public Card getMyCard() { 
     return myCard; 
    } 

    /** 
    * @param myCard the myCard to set 
    */ 
    public void setMyC`enter code here`ard(Card myCard) { 
     this.myCard = myCard; 
    } 

} 

框架:

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package singles; 

import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


/** 
* 
* @author Xenorosth 
*/ 
public class SinglesFrame extends JFrame implements MouseListener, MouseMotionListener{ 

    Deck myDeck = new Deck(); 
    CardPanel myTopMain = new CardPanel(myDeck.getMainCard(0)); //Top card of main deck 
    CardPanel myTopUsed = new CardPanel(myDeck.getMainCard(1)); //Top card of used deck 
    JLabel myLabel1 = new JLabel(); 


    public SinglesFrame(){ 
     setLayout(new FlowLayout(FlowLayout.CENTER)); 
     // myLabel1.setText(myDeck.getMainDeckLength() + ""); 
     myTopMain.addMouseListener(this); 
     this.add(myTopMain); 
     this.add(myTopUsed); 
     this.add(myLabel1); 

    } 

    @Override 
    public void mouseClicked(MouseEvent e) { 
      myDeck.addUsedCard(myDeck.getMainCard(0)); 
      myDeck.removeMainCard(0); 
      this.repaint(); 
      System.out.println(myDeck.getMainCard(0).toString()); 
    } 

    @Override 
    public void mousePressed(MouseEvent e) { 
     //throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void mouseReleased(MouseEvent e) { 
     // throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void mouseEntered(MouseEvent e) { 
    // throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void mouseExited(MouseEvent e) { 
     // throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     // throw new UnsupportedOperationException("Not supported yet."); 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     // throw new UnsupportedOperationException("Not supported yet."); 
    } 

} 
+0

你从'Deck'取出'Card',但它没有对'CardPanel都意义'因为它仍然提及它正在绘制的'卡片'。尝试更改'CardPanel'正在绘制的'Card'并调用其上的'repaint'。 – MadProgrammer 2013-04-25 03:11:40

+0

我可能并不理解你的意思。我还是Java新手,这是一个新话题。我尝试将它从0更改为另一个常量,但它没有做到这一点。我想我需要一个例子,因为我没有在任何地方尝试更换卡片。也许我没有改变它正确的方式? – Xenorosth 2013-04-25 03:17:45

回答

1

让我们从这里开始......

CardPanel myTopMain = new CardPanel(myDeck.getMainCard(0)); 
CardPanel myTopUsed = new CardPanel(myDeck.getMainCard(1)); 

您创建的CardPanel两个实例。每个面板被传递给Card

参考然后在mouseClicked你时,你这样做......

myDeck.addUsedCard(myDeck.getMainCard(0)); 
myDeck.removeMainCard(0); 
this.repaint(); 
System.out.println(myDeck.getMainCard(0).toString()); 

你已经改变了Deck,而是参考Card两个CardPanel s为指向没有改变。

您需要拨打(类似)setMyCard并传递下一张显示卡或null

你可能有接下来的问题是,你的paintComponent方法不允许的nullCard

+0

要么我没有这样做,要么没有帮助。 :/我尝试过使用我所做的setMyCard方法,并且确实没有任何改变。卡的价值变化,但没有别的。 – Xenorosth 2013-04-25 04:11:45

+0

Oooooh。我明白你在说什么。更改属性,而不是实际的卡!这工作!谢谢。 – Xenorosth 2013-04-25 04:21:16

+0

我只注意到你比较'String'错误。这个'myCard.getColor()==“black”'应该像这样'myCard.getColor()。equals(“black”)' – MadProgrammer 2013-04-25 04:22:06