截至目前,我正在尝试创建一个我的老师称为“单身人士”的JAVA版本的uno。目前,我只是试图找到一个工作套牌,我可以在其中删除卡片。
我目前的问题是,当我删除一张卡时,没有任何更新。它根本不重绘。我不知道为什么。
这是Panel和Frame类。
面板:
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 :(得分: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
引用未发生变化。
你需要打电话(类似于)setMyCard
并传入下一张要显示的卡片或null
。
您可能遇到的下一个问题是paintComponent
方法不允许使用null
Card