2017-11-22 23 views
0

私はコーディングスキルを向上させるためにtick-tac toeをコーディングしようとしています。以前のプロジェクトでは、新しい画面を作成するために、新しいJFrameを作成し、それを表示可能に設定し、もう1つを表示しないように設定しました。しかし、このプロジェクトでは、JPanelsを使用してpanelOneを削除し、panelTwoを追加することにしました。私はこの主題に関する以前のStackOverflowの質問を見て、それをいくつかの変更を加えて自分のコードにインポートしました。JFrameがフレームにJPanelを追加していません

私の場合、コードはpanelOneを削除していますが、panelTwoは追加していません。私のコードは以下の通りです。

package Main; 

import javax.swing.JFrame; 

public class MainFrame extends JFrame { 

public MainFrame() { 
    initComponents(); 
} 

void swapPanel(){ 
    new Thread(new Runnable(){ 
     @Override 
     public void run() { 
      MainFrame.this.remove(panelOne); 
      MainFrame.this.add(panelTwo); 
      MainFrame.this.invalidate(); 
      MainFrame.this.revalidate(); 
      MainFrame.this.pack(); 
     } 

    }).start(); 
} 

void singlePlayer(){ 
    swapPanel(); 
} 

void multiPlayer(){ 
    swapPanel(); 
} 

@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    panelTwo = new javax.swing.JPanel(); 
    firstVerticalLine = new javax.swing.JSeparator(); 
    secondVerticalLine = new javax.swing.JSeparator(); 
    firstRowLine1 = new javax.swing.JSeparator(); 
    secondRowLine1 = new javax.swing.JSeparator(); 
    firstRowLine2 = new javax.swing.JSeparator(); 
    secondRowLine2 = new javax.swing.JSeparator(); 
    firstRowLine3 = new javax.swing.JSeparator(); 
    secondRowLine3 = new javax.swing.JSeparator(); 
    jLabel1 = new javax.swing.JLabel(); 
    panelOne = new javax.swing.JPanel(); 
    singlePlayerButton = new javax.swing.JButton(); 
    mulitPlayerButton = new javax.swing.JButton(); 

    panelTwo.setMaximumSize(new java.awt.Dimension(409, 328)); 
    panelTwo.setMinimumSize(new java.awt.Dimension(409, 328)); 
    panelTwo.setPreferredSize(new java.awt.Dimension(409, 328)); 

    firstVerticalLine.setOrientation(javax.swing.SwingConstants.VERTICAL); 

    secondVerticalLine.setOrientation(javax.swing.SwingConstants.VERTICAL); 
    secondVerticalLine.setToolTipText(""); 

    firstRowLine1.setMinimumSize(new java.awt.Dimension(51, 10)); 
    firstRowLine1.setPreferredSize(new java.awt.Dimension(55, 10)); 

    javax.swing.GroupLayout panelTwoLayout = new javax.swing.GroupLayout(panelTwo); 
    panelTwo.setLayout(panelTwoLayout); 
    panelTwoLayout.setHorizontalGroup(
     panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(panelTwoLayout.createSequentialGroup() 
      .addGroup(panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
       .addComponent(firstRowLine1, javax.swing.GroupLayout.DEFAULT_SIZE, 118, Short.MAX_VALUE) 
       .addComponent(secondRowLine1)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(firstVerticalLine, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(firstRowLine2, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE) 
       .addComponent(secondRowLine2)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(secondVerticalLine, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
       .addComponent(firstRowLine3, javax.swing.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE) 
       .addComponent(secondRowLine3))) 
    ); 
    panelTwoLayout.setVerticalGroup(
     panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(firstVerticalLine) 
     .addComponent(secondVerticalLine) 
     .addGroup(panelTwoLayout.createSequentialGroup() 
      .addGroup(panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(panelTwoLayout.createSequentialGroup() 
        .addGap(104, 104, 104) 
        .addComponent(firstRowLine1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGap(102, 102, 102) 
        .addComponent(secondRowLine1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGroup(panelTwoLayout.createSequentialGroup() 
        .addGroup(panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(panelTwoLayout.createSequentialGroup() 
          .addGap(103, 103, 103) 
          .addComponent(firstRowLine2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGroup(panelTwoLayout.createSequentialGroup() 
          .addGap(102, 102, 102) 
          .addComponent(firstRowLine3, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))) 
        .addGap(102, 102, 102) 
        .addGroup(panelTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(secondRowLine3, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addComponent(secondRowLine2, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)))) 
      .addContainerGap(102, Short.MAX_VALUE)) 
    ); 

    jLabel1.setText("jLabel1"); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
    setTitle("Tic-Tac Toe"); 
    setMinimumSize(new java.awt.Dimension(409, 328)); 

    panelOne.setMinimumSize(new java.awt.Dimension(409, 328)); 

    singlePlayerButton.setText("Singleplayer"); 
    singlePlayerButton.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      singlePlayerButtonActionPerformed(evt); 
     } 
    }); 

    mulitPlayerButton.setText("Multiplayer"); 
    mulitPlayerButton.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      mulitPlayerButtonActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout panelOneLayout = new javax.swing.GroupLayout(panelOne); 
    panelOne.setLayout(panelOneLayout); 
    panelOneLayout.setHorizontalGroup(
     panelOneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(panelOneLayout.createSequentialGroup() 
      .addGap(157, 157, 157) 
      .addGroup(panelOneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
       .addComponent(singlePlayerButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(mulitPlayerButton, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addContainerGap(161, Short.MAX_VALUE)) 
    ); 
    panelOneLayout.setVerticalGroup(
     panelOneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(panelOneLayout.createSequentialGroup() 
      .addGap(113, 113, 113) 
      .addComponent(singlePlayerButton) 
      .addGap(33, 33, 33) 
      .addComponent(mulitPlayerButton) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(panelOne, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(panelOne, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 

    pack(); 
    setLocationRelativeTo(null); 
}// </editor-fold>       

private void mulitPlayerButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    multiPlayer(); 
}             

private void singlePlayerButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    singlePlayer(); 
}             

public static void main(String args[]) { 
    //<editor-fold defaultstate="collapsed" desc="Stuff/Look and Feel"> 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Windows".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(MainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new MainFrame().setVisible(true); 
     } 
    }); 
    //</editor-fold> 
} 

// Variables declaration - do not modify      
private javax.swing.JSeparator firstRowLine1; 
private javax.swing.JSeparator firstRowLine2; 
private javax.swing.JSeparator firstRowLine3; 
private javax.swing.JSeparator firstVerticalLine; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JButton mulitPlayerButton; 
private javax.swing.JPanel panelOne; 
private javax.swing.JPanel panelTwo; 
private javax.swing.JSeparator secondRowLine1; 
private javax.swing.JSeparator secondRowLine2; 
private javax.swing.JSeparator secondRowLine3; 
private javax.swing.JSeparator secondVerticalLine; 
private javax.swing.JButton singlePlayerButton; 
// End of variables declaration     

} 

私は両方のパネルを設計するためにNetBeansを使用しています。

ご協力いただきましてありがとうございます。

+1

あなたはイベントディスパッチスレッド以外のスレッドからSwingコンポーネントにアクセスすることはできません。 https://docs.oracle.com/javase/tutorial/uiswing/concurrency/をお読みください。私はそれを行うスレッドを開始するためのreaonは表示されません、あなたはあなたがやっていることを達成するためにCardLayoutを使う方がよいでしょう。それがそれのためのものです。 –

+0

私は新しいスレッドを削除して、同じように動作します。 CardLayoutについて聞いてもよろしいですか?ありがとうございました。 –

+1

あなたはドキュメントを読んで、何かを試してみてはいかがですか? https://docs.oracle.com/javase/tutorial/uiswing/layout/card.html –

答えて

0

あなたも追加することができます。

MainFrame.this.repaint(); 
関連する問題