2016-05-31 51 views
-1

试图做出乒乓球,我差不多完成了。我已经设置好了,所以当一个玩家获得5分时,另一个JFrame打开。在该JFrame上,有两个按钮;一个再打,一个打开记分牌(最近三场比赛的记录)。出于某种原因,我无法获得打开记分牌的按钮。会爱一些帮助搞清楚什么是错的。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,我仍然认为我在我原来的评论中提出了两个有效的观点。但是,由于它造成了混乱,我将删除评论,并在未来不发表评论。 – camickr

回答

1

首先,所有类名都应以大写字母开头,因此您的类应该是ScoreBoard

public class ScoreBoard extends JPanel { 

Scoreboard类是一个JPanel

ScoreBoard board = new ScoreBoard(); 

你的ActionListener代码只是创建了一个面板。除非将其添加到窗口,否则无法显示面板。

您应该在JDialog(不是JFrame)中显示您的记分牌。

的基本代码是:需要添加到的ActionListener

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

这基本上是从main()方法的代码,除非你使用一个JDialog,没有一个JFrame。您也可以使用DISPOSE_ON_CLOSE而不是EXIT_ON_CLOSE

+0

谢谢!这工作完美。 –

0

我假设你没有使用这个主要功能,而是从一个不同的主体(使得你的程序包含你的按钮)开始你的程序。

当你运行一个程序时(假设你使用的是IDE,比如Eclipse),只执行一个主函数,因此这个 main没有。

将所有代码从main移动到actionPerformed()方法。

请注意,这不是一个最佳解决方案,因为每次按下按钮时它都会创建一个新的JFrame。更好的方法是显示/隐藏一个JFrame。

+0

'将所有代码从main移动到actionPerformed()方法。“ - 不,你不应该那样做。阅读我对原始问题的评论,然后查看我的答案。 – camickr