2016-03-23 10 views
0

私は左側のjpanelウィンドウでゲームを動かすポンゲームを作っています。私は右の別のjpanelウィンドウを追加しました。ユーザーはゲームをリセットして勝利に必要なポイント数を決定することができました。ネットビーンのjPanels間の切り替え方法は?

とにかく、左のパネル(ゲームパネルではない)のボタンとやり取りすると、ゲーム画面を再び選択することができず、ゲームが応答しなくなります。私はnetbeansを使用しているので、私は初心者ですので、どんな助けもありがとう!

ここに問題の写真があり、ゲームはキーボードで制御されます。それは実行し続けますが、ボタンを押すとキーボードに応答しなくなります。 enter image description here 私のコードもいくつか追加しました。

public class LeikGluggi extends javax.swing.JPanel implements ActionListener, KeyListener { 
    int HRADISPADA = 10; 
    Spilari1 spilari1; 
    Spilari2 spilari2; 
    Bolti bolti; 
    public static int stadaLeiks = 0; //0 = stop, 1 = pása, 2 = spila 


    public LeikGluggi() { 
     initComponents(); 

     spilari1 = new Spilari1(); 
     spilari2 = new Spilari2(); 
     bolti = new Bolti(); 
     setSize(Leikbord.GLUGGI_BREIDD,Leikbord.GLUGGI_HAED); 
     this.addKeyListener(this); //látum vita þegar ýtt er á takka 
     this.setFocusable(true); //virkar bara þegar glugginn er valinn 
     Timer klukka = new Timer(30, this); 
     klukka.start(); 

    } 

-

private void uppfaera() 
{ 
    spilari1.uppfaera(); 
    spilari2.uppfaera(); 
    bolti.uppfaera(); 
    bolti.markCheck(); 
    bolti.skoppCheck(spilari1, spilari2); 


} 

public void resetLeik() 
{ 

} 


@Override 
public void paintComponent(Graphics g) 
{ 


    g.setColor(Color.BLUE); 
    spilari1.paint(g); 
    spilari2.paint(g); 
    bolti.paint(g);   //bolti teiknaður 

    if(stadaLeiks == 0) 
    { 
     g.setColor(Color.BLACK); 
     g.setFont(new Font("Consolas", Font.PLAIN, 30)); 
     g.drawString("Ýttu á bilstöng til að byrja", 50, 200); 
    } 
    if(stadaLeiks == 1) 
    { 
     g.setColor(Color.BLACK); 
     g.setFont(new Font("Consolas", Font.PLAIN, 80)); 
     g.drawString("PÁSA", 210, 250); 
    } 


} 


@Override 
public void actionPerformed(ActionEvent e) 
{ 
    //þegar timer tikkar þá actinPerformed keyrt 
    if(stadaLeiks == 2) 
    { 
     uppfaera(); 
    }     
    repaint(); 

} 

//Spaði hreyfður ef ýtt er á takka 
@Override 
public void keyPressed(KeyEvent e) 
{ 
    if(e.getKeyCode() == KeyEvent.VK_P) 
    { 
     if (stadaLeiks != 2) 
      stadaLeiks = 2; 

     else stadaLeiks = 1; 
    } 

    if (e.getKeyCode() == KeyEvent.VK_W) 
    { 
     spilari1.setyHradi(-HRADISPADA); 
    } 

    if (e.getKeyCode() == KeyEvent.VK_UP) 
    { 
     spilari2.setyHradi(-HRADISPADA); 
    } 

    if (e.getKeyCode() == KeyEvent.VK_S) 
    { 
     spilari1.setyHradi(HRADISPADA); 
    } 

    if (e.getKeyCode() == KeyEvent.VK_DOWN) 
    { 
     spilari2.setyHradi(HRADISPADA); 
    } 
} 

@Override 
public void keyReleased(KeyEvent e) 
{ 
    if (e.getKeyCode() == KeyEvent.VK_W || e.getKeyCode() == KeyEvent.VK_S) 
    { 
     spilari1.setyHradi(0); 
    } 
    if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) 
    { 
     spilari2.setyHradi(0); 
    } 
} 

public void keyTyped(KeyEvent e) 
{ 
}      

}

+2

コードを追加できますか? –

+0

[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を作成してください – stjepano

+0

いくつかのコードを追加し、スクリーンショットも追加しました。ありがとうございます! – snjall

答えて

0

あなたがオブジェクトをアニメーション化し、それがしばらく眠る新しいスレッドを作成しますが、多分あなたはあまりにも多くのUIスレッドをブロックしていると、あなたのアプリケーションは、単に応答を停止します、あなたのUIを更新するアクションが処理されていることを確認してくださいEDT

そのスレッドからオブジェクトの位置を変更してを使用してください

私はここでは問題が発生していませんが、私はあなたのコードがjbuttonであるとは見えません。 注 - あなたの答えを編集してください、私は本当にあなたがここで尋ねているものを見て、そして少なくともいくつかのコメントでコードサンプルで英語を使用してみてください。

関連する問題