如何使Jbutton运行另一个类?

时间:2014-09-23 20:49:36

标签: java swing netbeans jbutton

您好stackoverflow社区!

我正在为我的决赛制作一个AI TicTacToe项目,并且在按下jFut类中的一个jButton之后我在尝试运行另一个类时遇到了问题。

我使用的是NetBeans的jFrame类,您可以通过将其放置在容器中轻松进行设计,并且某些代码不可编辑。

我想要制作的游戏项目是一个可行的主菜单(它是一个jFrame类),它包含三个按钮,分别是Normal,Large和Extra Large。对于Normal按钮,我想让这个按钮在按下后运行TicTacToe(这是一个普通的java类),但由于某些原因我不能使它工作。以下是代码:

MainMenu.java

private void ButtonNormal(java.awt.event.ActionEvent evt) {                              
    // TODO add your handling code here:
    Normal_TicTacToe SIZE1 = new Normal_TicTacToe();  // This is the problem
    SIZE1.setVisible(true);                             
}
/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() 
    {
        public void run()
        {
            new MainMenu().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton buttonNormal;
// End of variables declaration                   
}

Normal_TicTacToe.java - 我从互联网上获取此代码,并且我将其修改为大尺寸和超大尺寸。我将此人视为文档中的原作者。

public final class Normal_TicTacToe extends JApplet 
{

private static final long serialVersionUID = 1L;
private final Normal_Tile[] TILES = new Normal_Tile[9];
private final int TILE_SPACING = 96;
private final int WIDTH = 96, HEIGHT = 96;
private final JFrame GAMEFRAME = new JFrame("Tic-Tac-Toe");
private final Normal_TilePainter PAINTER = new Normal_TilePainter(this);
private final Normal_ClickHandler CLICK_HANDLER = new Normal_ClickHandler(this);
private final boolean AI;
private boolean aiTurn = false;
private Normal_Holder turn = Normal_Holder.X;
private int whoseTurn = 0;
private final Dimension FRAME_SIZE = new Dimension(295, 304);
private final int FONT_SIZE = 64;
private int oWins = 0;
private int xWins = 0;
private boolean gameOver = false;
private boolean nextTurn = false;
public final Normal_AI GAME_AI = new Normal_AI(this);

public void init() 
{
    Normal_TicTacToe game = new Normal_TicTacToe(true);
game.newGame();
}

public Normal_TicTacToe(boolean ai) 
{
    this.AI = ai;
    PAINTER.setSize(FRAME_SIZE);
    buildFrame();
    loadTiles();
}

此外,两个java文件都在同一个包中。

如果你正在寻找扩展代码和所有java文件,你可以在这里找到它:
My MainMenu.java
Chall's TicTacToe and his java files(向下滚动,直到看到源文件)。

2 个答案:

答案 0 :(得分:0)

您应该在按钮中创建它的实例。

您的代码:

buttonXLarge.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        ButtonXLarge(evt); // not sure what it does, but it doesn't make Tic Tac Toe
    }
});

你最想要它做的是初始化并开始一个新的tic tac toe board。

buttonXLarge.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
        Normal_TicTacToe myBoard = new Normal_TicTacToe(true);
        myBoard.newGame();
    }
});

我不确定JApplet将如何处理你当前正在做的事情,因为我通常不会将applet与JFrame混合,但特别是为了激活tic tac toe board,你应该在你的内容中编写你想要它做的事情。 actionPerformed listener。

如果您真的想节省编码时间,可以使用JFrame中JApplet的内容重建TicTacToe。

答案 1 :(得分:0)

Normal_TICTACTOE的构造函数如下所示:

public Normal_TicTacToe(boolean ai) 
{
this.AI = ai;
PAINTER.setSize(FRAME_SIZE);
buildFrame();
loadTiles();
}

它的参数列表中有一个布尔变量。

因此覆盖了默认构造函数。

使用布尔值(true或false)调用构造函数:

Normal_TicTacToe game = new Normal_TicTacToe(true);

(我认为它与人工智能的开启或关闭有关)

在你得到的实例上调用newGame()方法。

game.newGame();