我正在使用java制作记忆游戏。我有一个扩展JButton的类,用于绘制卡片,我有一个主要的跑步者类。这是我的卡类。
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.*;
public class Card extends JButton {
private String cardValue;
private boolean matched = false;
private int width = 70;
public int x;
public int y;
public Card(int x, int y) {
this.x = x;
this.y = y;
setPreferredSize(new Dimension(x, y));
}
public void drawFaceDown() {
setBackground(new Color(214, 247, 202));
setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
};
}
这是我的Runner类
import java.util.List;
import java.util.ArrayList;
public class Runner {
public static void main(String[] args) {
List<Card> tiles = new ArrayList<Card>();
int NUM_COLS = 5;
int NUM_ROWS = 4;
for (int i = 0; i < NUM_COLS; i++) {
for (int j = 0; j < NUM_ROWS; j++) {
tiles.add(new Card(i * 78 + 10, j * 78 + 40));
}
}
for (int i = 0; i < tiles.size(); i++) {
tiles.get(i).drawFaceDown();
}
}
}
在for循环中,我尝试使用drawFaceDown(),但是在图形面板上没有绘制任何内容。有人可以帮助我解决所发生的事情。
答案 0 :(得分:0)
您应该将按钮添加到Panel以便在某处显示。类似的东西:
JFrame f = new JFrame();
f.add(tiles.get(i).drawFaceDown());
答案 1 :(得分:0)
您应该将卡片添加到JFrame
。按照您的代码,GridLayout
将是最适合您的。像这样更改您的Runner
课程。我稍微缩放了按钮的大小。
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import java.awt.*;
public class Runner {
public static void main(String[] args) {
List<Card> tiles = new ArrayList<Card>();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int NUM_COLS = 5;
int NUM_ROWS = 4;
frame.setLayout(new GridLayout(NUM_ROWS, NUM_COLS));
for (int i = 0; i < NUM_COLS; i++) {
for (int j = 0; j < NUM_ROWS; j++) {
tiles.add(new Card(i * 8 + 10, j * 8 + 40));
}
}
for (int i = 0; i < tiles.size(); i++) {
frame.add(tiles.get(i));
tiles.get(i).drawFaceDown();
}
frame.pack();
frame.setVisible(true);
}
}
另请阅读此tutorial。