我正在尝试编写一个代码,以便每次按下它时都会转动卡片。 是否在JCardDemo applet中的createGUI中出现问题?那怎么纠正呢? 这是我的code.thx
JCardbutton课程 import java.applet。; import java.awt。; import java.awt.event。; import javax.swing。; import javax.swing.event。*; import java.awt.geom.AffineTransform;
public class JCardButton extends JButton {
private ImageIcon myFace;
private ImageIcon myBack;
private boolean myFaceUp;
private Rank myRank;
private Suit mySuit;
public Rank getRank() {
return myRank;
}
public Suit getSuit() {
return mySuit;
}
public JCardButton(Suit s, Rank r, ImageIcon face, ImageIcon back) {
super();
mySuit = s;
myRank = r;
setFace(face);
setBack(back);
this.setSize(face.getIconWidth(), face.getIconHeight());
showBack();
}
public ImageIcon getFaceImage() {
return myFace;
}
public boolean isFaceUp() {
return true;//isFaceUp
}
public boolean isFaceDown() {
return false;//
}
public ImageIcon getBackImage() {
return myBack;
}
public void setFace(ImageIcon image) {
image = myFace;
}
public void setBack(ImageIcon image) {
image = myBack;
}
public void showBack() {
setIcon(myBack);
myFaceUp = false;
}
public void showFace() {
setIcon(myFace);
myFaceUp = true;
}
public void turnOver() {
if(isFaceUp()) {
showBack();
}
else {
showFace();
}
}
public int compareTo (JCardButton other) {
if(this.getSuit().compareTo(other.getSuit()) ==0) {
return this.getRank().compareTo(other.getRank());
}
else {
return this.getSuit().compareTo(other.getSuit());
}
}
public String toString() {
return myRank.toString() + mySuit.toString();
}
}
JCardDemo import java.awt.event。; import java.awt。; import javax.swing。*;
public class JCardDemo extends JApplet implements ActionListener
{
private static final long serialVersionUID = 2005L;
private Container window;
private JCardButton jcbCard;
public void init() {
window = new DoubleBufferedPanel();
setContentPane(window);
createAppearance();
createGUI();
}
public void createAppearance(){
window.setLayout(null);
}
public void createGUI()
{
ImageIcon front = new ImageIcon(getImage(getCodeBase(), "images/2c.gif"));
ImageIcon back = new ImageIcon(getImage(getCodeBase(), "images/b.gif"));
jcbCard = new JCardButton(Suit.clubs, Rank.two, front, back);
jcbCard.setLocation(50, 50);
jcbCard.addActionListener(this);
window.add(jcbCard);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() instanceof JCardButton)
{
JCardButton c = (JCardButton) e.getSource();
c.turnOver();
}
repaint();
}
class DoubleBufferedPanel extends JPanel {
private static final long serialVersionUID = 44L;
public void paint(Graphics g){
super.paint(g);
}
}
}
排名枚举
public enum Rank
{
ace,
two,
three,
four,
five,
six,
seven,
eight,
nine,
ten,
jack,
queen,
king;
public String toString()
{
switch(this)
{
case ace: return "A";
case two: return "2";
case three: return "3";
case four: return "4";
case five: return "5";
case six: return "6";
case seven: return "7";
case eight: return "8";
case nine: return "9";
case ten: return "T";
case jack: return "J";
case queen: return "Q";
case king: return "K";
default: return "??";
}
}
}
适合enum
public enum Suit
{
clubs, hearts, spades, diamonds;
public String toString()
{
return this.name().substring(0, 1).toUpperCase();
}
}
答案 0 :(得分:1)
图像切换功能在此处不起作用有两个原因。
首先,JCardButton
public void setFace(ImageIcon image) {
image = myFace; // local variable image assigned to myFace still null
}
应该是
public void setFace(ImageIcon image) {
myFace = image;
}
这也适用于setBack
。
其次,isFaceUp
总是返回true
public boolean isFaceUp() {
return true; //??
}
替换为
public boolean isFaceUp() {
return myFaceUp;
}