![](/img/trans.png)
[英]How do I add an ActionListener to an instance of my class that extends JButton?
[英]How do you draw a method from a class that extends Jbutton
我正在用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));
};
}
這是我的亞軍課
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(),但是在圖形面板上未繪制任何內容。 有人可以幫我解決所發生的事情嗎?
您應該將按鈕添加到面板中以便在某處顯示它。 就像是:
JFrame f = new JFrame();
f.add(tiles.get(i).drawFaceDown());
您應該將Cards添加到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);
}
}
另外,請閱讀本教程 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.