2014-09-23 56 views
0

嗨stackoverflow社区!如何让Jbutton开办另一堂课?

我正在为我的决赛制作一个AI TicTacToe项目,并且在按jFrame类中的某个jButtons之后试图运行另一个类时出现问题。

我正在使用NetBean的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

欢迎来到Stackoverflow。对于你来说,这是太多的代码,希望志愿者通过。为了更快地获得更好的帮助,请发布一个[最小,完整,可验证的示例](http://stackoverflow.com/help/mcve),以说明您遇到的问题。为了简化标题,这个例子应该少于30行代码。 – splungebob 2014-09-23 20:55:59

+0

是的,对不起。我会尽量尽量减少。谢谢。 – FrankSeven 2014-09-23 21:27:19

回答

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 
    } 
}); 

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的将如何处理里面你目前在做什么,因为我向来混用JFrames小程序,而是专门来激活井字板,你应该写你想要什么在actionPerformed监听器中执行。

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

+0

是的,我真的认为OP应该折腾他下载的代码,并从头开始。那里有太多糟糕的代码需要处理。从简单的事情开始,然后慢慢地建立起来会更容易。 – markspace 2014-09-23 21:02:30

+0

不幸的是,那部分是不可编辑的,因为Netbeans不会让我。但我试图把你的代码放在MainMenu的'private void ButtonNormal(java.awt.event.ActionListener evt)'下。它会打开Normal_TicTacToe,但它不会加载它的图形,就像它没有响应一样。 – FrankSeven 2014-09-23 21:15:47

+0

@FrankSeven我不能真正回答为什么tictactoe不工作。至少在十年内还没有碰过JApplet。您也可以制作一个红色的JPanel并显示它,看看它是否有效,然后在该JPanel上构建您的井号。不保证Applets的安全。 – Compass 2014-09-23 21:17:46

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(); 
+0

我把它们放在'private void ButtonNormal(java.awt.event.ActionListener evt)'下面。它运行并打开TicTacToe,但游戏没有响应。 – FrankSeven 2014-09-23 21:42:45