gpt4 book ai didi

java - 重画不更新?

转载 作者:行者123 更新时间:2023-12-01 14:38:47 24 4
gpt4 key购买 nike

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

但我目前的问题是,当我删除卡时,没有任何更新。根本就不用重画。我不知道为什么。

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

}

最佳答案

让我们从这里开始...

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方法不允许 null Card

关于java - 重画不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com