JFrame不会通过ActionListener打开

时间:2016-05-31 19:37:41

标签: java swing jframe

试图制作乒乓球,我差不多完成了。我设置好了当玩家获得5分时,另一个JFrame打开。在那个JFrame上,有两个按钮;一个人再次上场,一个人打开一个记分牌(最近三场比赛的记录)。出于某种原因,我无法通过按钮打开记分牌。愿意帮助找出问题所在。

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。

提前致谢。

2 个答案:

答案 0 :(得分:1)

首先,类名应以大写字母开头,因此您的类应为ScoreBoard

public class ScoreBoard extends JPanel {

您的Scoreboard课程是JPanel

ScoreBoard board = new ScoreBoard();

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

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

基本代码是:

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

基本上,main()方法中的代码需要添加到ActionListener中,除了使用JDialog而不是JFrame。您也可以使用DISPOSE_ON_CLOSE代替EXIT_ON_CLOSE

答案 1 :(得分:0)

我假设您没有使用此主要功能,而是从另一个主程序(包含您的按钮的主程序)启动您的程序。

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

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

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