如何从扩展Jbutton的类中绘制方法

时间:2016-05-25 12:14:28

标签: java swing

我正在使用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(),但是在图形面板上没有绘制任何内容。有人可以帮助我解决所发生的事情。

2 个答案:

答案 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