2014-09-23 90 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