2016-05-31 17 views
-1

ピンポン​​を作ろうとしています。私はそれが設定されているので、プレーヤーが5点を得たときに別のJFrameが開きます。そのJFrameには2つのボタンがあります。 1つはもう一度プレーし、もう1つはスコアボード(最後の3つの試合の記録)を開く。何らかの理由で、私はスコアボードを開くためのボタンを得ることができません。何が間違っているかを理解するのに役立つでしょう。JFrameはActionListenerで開くことができません

import java.awt.Graphics; 

import javax.swing.JPanel; 
import javax.swing.JFrame; 

public class scoreBoard extends JPanel { 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     g.drawLine(0, 50, 200, 50); 
     g.drawLine(0, 100, 200, 100); 
     g.drawLine(0, 150, 200, 150); 
     g.drawLine(95, 0, 95, 230); 

     g.drawString("PLAYER 1", 15, 30); 
     g.drawString("PLAYER 2", 115, 30); 

     g.drawString(String.valueOf(gameOver.Score[0][0]), 15, 80); 
     g.drawString(String.valueOf(gameOver.Score[0][1]), 115, 80); 
     g.drawString(String.valueOf(gameOver.Score[1][0]), 15, 130); 
     g.drawString(String.valueOf(gameOver.Score[1][1]), 115, 130); 
     g.drawString(String.valueOf(gameOver.Score[2][0]), 15, 180); 
     g.drawString(String.valueOf(gameOver.Score[2][1]), 115, 180); 
    } 

    public static void main(String[] args) { 
     scoreBoard board = new scoreBoard(); 

     JFrame boardFrame = new JFrame("Score Board"); 
     boardFrame.setSize(200, 230); 
     boardFrame.setVisible(true); 
     boardFrame.setResizable(false); 
     boardFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     boardFrame.add(board); 
    } 
} 

これはスコアボードのクラスです。

scores = new JButton("Recent Scores"); 
scores.addActionListener(new ActionListener(){ 
    public void actionPerformed(ActionEvent e) 
    { 
     scoreBoard board = new scoreBoard(); 
    } 
}); 

これは私がスコアボードを開くために持っているActionListenerです。

ありがとうございます。

+0

スコアボードのコンストラクタはありますか?現時点では、私が見ているのは、デフォルトのコンストラクタ呼び出しでインスタンス化されないメインメソッドです。 – Compass

+0

あなたのscoreBoardの主な方法を見てください、あなたのactionPerformedメソッドがやっているべき例があります – MadProgrammer

+0

@MadProgrammer、私はまだ元のコメントに2つの有効な点を作ったと思います。しかし、それが混乱を引き起こしたので、私はコメントを削除し、将来コメントすることを控えます。 – camickr

答えて

1

最初にすべてのクラス名は大文字で始まり、クラスはScoreBoardである必要があります。

public class ScoreBoard extends JPanel { 

あなたScoreboardクラスはJPanelの

ScoreBoard board = new ScoreBoard(); 

あなたのactionListenerコードがちょうどパネルを作成しています。パネルをウィンドウに追加しない限り、パネルを表示することはできません。

スコアボードをJDialog(JFrameではなく)に表示する必要があります。

基本的なコードは次のようになります。基本的にはmain()メソッドのコードです

scoreBoard board = new scoreBoard(); 
JDialog dialog = new JDialog(); 
dialog.add(board); 
dialog.pack(); 
dialog.setVisible(true); 

はあなたのJDialog、JFrameのないを使用する以外、たActionListenerに追加する必要があります。またEXIT_ON_CLOSEの代わりにDISPOSE_ON_CLOSEを使用します。

+0

ありがとう!これは完全に機能します。 –

0

私はこのメイン関数を使用していないと仮定しています。代わりに、別のメイン(ボタンを含むもの)からプログラムを開始しています。

プログラムを実行すると(EclipseなどのIDEを使用していると仮定して)、1つのメイン関数しか実行されないため、このメインは実行されません。

すべてのコードをmainからactionPerformed()メソッドに移動します。

ボタンを押すたびに新しいJFrameが作成されるため、これは最適な解決策ではありません。より良いアプローチは、1つのJFrameを表示/非表示にすることです。

+0

'すべてのコードをmainからactionPerformed()メソッドに移動してください。 ' - あなたはそれをしてはいけません。元の質問に自分のコメントを読んでから、私の答えをチェックしてください。 – camickr