2016-05-25 18 views
0

我正在使用java製作記憶遊戲。我有一個擴展JButton的類,用於繪製卡片,並且我有一個主要的跑步者類。這是我的卡片類。如何從擴展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(),但是沒有什麼是繪製圖形面板上。有人可以幫助我瞭解正在發生的事情。

+0

我到底該怎麼做? –

+0

我試圖尋找一些教程來添加JButtons到圖形面板,這就是我發現的。 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; 公共類BasicSwing擴展JFrame { \t \t JPanel p = new JPanel(); \t JButton b = new JButton(「Hello」); \t \t \t公共靜態無效的主要(字串[] args){ \t \t新BasicSwing(); \t} \t \t公共BasicSwing(){ \t \t超( 「基本Swing應用程序」); \t \t \t \t setSize(400,300); \t \t setResizable(true); \t \t \t \t p.add(b); \t \t p.add(t); \t \t p.add(ta); \t \t p.add(l); \t \t p.add(cb); \t \t add(p); \t \t \t \t setVisible(true); \t} } –

+0

但是,我必須在構造函數中添加按鈕。在我的例子中,我試圖在for循環中執行它,而p.add()不起作用。你是怎麼做到的? –

回答

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

+0

GUI的東西都應該在EventDispatch線程上完成,而不是主線程。 – FredK

0

您應該將該按鈕添加到Panel以便在某處顯示它。例如:

JFrame f = new JFrame(); 
f.add(tiles.get(i).drawFaceDown());