Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按钮新游戏不工作Java_Java_Swing_Button_Frame_Actionlistener - Fatal编程技术网

按钮新游戏不工作Java

按钮新游戏不工作Java,java,swing,button,frame,actionlistener,Java,Swing,Button,Frame,Actionlistener,嗨,我正在为我的学习做一个项目,我是java新手。我需要做一个游戏-阿卡诺德。我想做的是一个有两个按钮“新建游戏”和“退出”的游戏手册。stackoverflow.com的人重建了我的菜单代码,但它仍然不起作用:(单击“新游戏”后,我得到了一个空白框:(.可能是因为Gra构造函数。Gra的构造函数需要看起来如何才能与我的菜单代码一起工作。 下面是代码(我将粘贴所有Arkanoid类代码和Gra类的最重要部分): Arkanoid类: package arkanoid; import javax

嗨,我正在为我的学习做一个项目,我是java新手。我需要做一个游戏-阿卡诺德。我想做的是一个有两个按钮“新建游戏”和“退出”的游戏手册。stackoverflow.com的人重建了我的菜单代码,但它仍然不起作用:(单击“新游戏”后,我得到了一个空白框:(.可能是因为
Gra
构造函数。
Gra
的构造函数需要看起来如何才能与我的菜单代码一起工作。 下面是代码(我将粘贴所有
Arkanoid
类代码和
Gra
类的最重要部分):

Arkanoid类:

package arkanoid;

import javax.swing.*;
import java.awt.event.*;

public class Arkanoid extends JFrame 
{

private static final long serialVersionUID = 5647459635833443178L;

public Arkanoid() {
    super("Arkanoid");
    setSize(500,400);
    setTitle("Arkanoid BETA");
    setLocationRelativeTo(null);
    setResizable(false);

    final JPanel panel = new JPanel();
    setContentPane(panel);

    panel.add(new JButton(new AbstractAction("New game") {
        public void actionPerformed (ActionEvent e) {     
            panel.removeAll();
            panel.add(new Gra()); //constructor of Gra need to return some Panel i think but i dont know how to do that
            panel.revalidate();
            panel.repaint();
        }
    }));

   panel.add(new JButton(new AbstractAction("Quit") {
        public void actionPerformed (ActionEvent e) {     
            Arkanoid.this.setVisible(false);
        }
    }));
}
public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          Arkanoid frame = new Arkanoid();
          frame.setVisible(true);
        }
    });
}
}
Gra等级:

package arkanoid;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Gra extends JPanel
{
/*some not important variables*/

Pilka pilka;
Paletka paletka;
Cegla cegla_tab[];
Serce serce_tab[];

Timer timer;

public Gra() 
{
    addKeyListener(new TAdapter());
    setFocusable(true);

    cegla_tab = new Cegla[liczba_cegiel];
    serce_tab = new Serce[max_zycia];
    //setDoubleBuffered(true);
    timer = new Timer();
    timer.scheduleAtFixedRate(new ScheduleTask(), 1000, 10);
}

public void addNotify() 
{
    super.addNotify();
    start_gry();
}
public void start_gry() 
{
    pilka = new Pilka();
    paletka = new Paletka();
    /* painting a bricks and lifes for game start */

}
public void koniec_gry()  //end of a game
{
    czas_konca = System.currentTimeMillis();

    gra = 3;
    timer.cancel(); 

}
public void paint(Graphics g) 
{
    super.paint(g);
    //repaiting ball positions, bricks and paddle

    Toolkit.getDefaultToolkit().sync();
    g.dispose();
}
private class TAdapter extends KeyAdapter 
{
    public void keyReleased(KeyEvent e) 
    {
        paletka.klawisz_puszczony(e);
    }
    public void keyPressed(KeyEvent e) 
    {
        paletka.klawisz_wcisniety(e);
    }
}
class ScheduleTask extends TimerTask 
{
    public void run() 
    {
        if(paletka.czy_pausa()==false)
        {
            pilka.przesun();
            paletka.przesun();
            czy_zderzenie();
            repaint();
        }
    }
}

public void czy_zderzenie() 
{
  //checking a collisions with bricks
}
}

您需要替代paintComponent,而不是paint

此外,Gra的构造函数返回一个JPanel。构造函数将返回您正在构造的对象,在本例中是Gra,它也是JPanel。这是多态性在起作用


哦,根据上面的评论,你真的不应该处理图形对象。

不是所有stackoverflow用户都是Polish对于JPanel,你覆盖
paintComponent
,而不是
paint
,其次,请不要处理传入的图形。你没有创建它,所以你真的不应该处理它。B这些项目都很简单,谢谢你,根据这个例子,我编写了自己的工作代码。此外,我用
g.dispose();
删除了一行,我的一个朋友说我应该这样做:/n他当时错了。再次感谢你和LunaEques