0

到目前为止,我正在努力创建一个 JAVA 版本的 uno,我的老师称之为“Singles”。目前,我只是想获得一个可以移除卡片的工作套牌。

不过,我目前的问题是,当我移除一张卡时,没有任何更新。它根本不会重绘。我不知道为什么。

这是面板和框架类。

控制板:

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.");
    }

}
4

1 回答 1

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());

您已经更改了,但是两个s 指向Deck的引用没有改变。CardCardPanel

你需要跟注(类似的东西)setMyCard,要么传递下一张要显示的牌,要么null

您可能遇到的下一个问题是您的paintComponent方法不允许null Card

于 2013-04-25T03:28:58.387 回答