2016-05-25 19 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)); 
    }; 

} 

、ここでは、私はしかし、何もグラフィックパネル上に描画されていないdrawFaceDown()を使用しようとする私のランナークラス

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ループです。誰かが何が起こっているのか私を助けることができますか?

+0

私はそれをどのように正確に行いますか? –

+0

JButtonをグラフィックスパネルに追加するためのチュートリアルを探してみましたが、これは私が見つけたものです。 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; public class BasicSwing extends JFrame { \t \t JPanel p = new JPanel(); \t JButton b =新しいJButton( "Hello"); \t \t \t public static void main(String [] args){ \t \t new BasicSwing(); \t} \t \t公共BasicSwing(){ \t \tスーパー( "基本的なスイングのApp"); \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()); 
関連する問題