如何在netbeans中的jPanel之间切换?

时间:2016-03-23 14:38:23

标签: java swing netbeans

我在左边的jpanel窗口中运行我的游戏进行乒乓球比赛。我在右侧添加了另一个jpanel窗口,以便用户可以重置游戏并决定获胜所需的点数。

无论如何,当我与左侧面板上的按钮(非游戏面板)进行交互时,我无法再次选择我的游戏屏幕而我的游戏停止响应。我正在使用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)
{
}                      

}

1 个答案:

答案 0 :(得分:0)

创建新线程,在其中为对象设置动画并让它休眠一段时间,也许你阻止了太多ui线程,你的应用程序只是停止响应,确保更新你的ui的所有动作都在{{3}处理}

从该线程更改对象的位置并使用EDT

我只是在这里没有回答问题,我没有看到你的jbutton代码。 注意 - 编辑你的答案,我真的不知道你在这里问的是什么,请尝试在代码示例中使用英语,至少是一些评论。