0
所以這裏是我的類遊戲,我需要它是一個運行和處理新遊戲。一旦我按下Jbutton newGame,一款新遊戲Jpanel應該開始存在,一個新的循環應該從一個小細節開始。每次我運行遊戲,完成它,再次將新遊戲放入KoniecHry 2中,一次使用正確的面板,一次使用面板值爲NULL並拋出空指針異常,同時JOptionPane對話是拋出兩次,第一次拋出前一次會話名稱,一次拋棄null 任何想法,我在哪裏複製這些實例?我實例化一個額外的重複,我不能找到它
public class Game extends JFrame {
public static final int SIRKA_OKNA = 1000;
public static final int VYSKA_OKNA = 600;
public static final int SIRKA_KARTY = SIRKA_OKNA/15;
public static final int VYSKA_KARTY = VYSKA_OKNA/10;
public static final int MEDZERA_OBJEKTOV = SIRKA_KARTY/20;
public static final int SIRKA_POSUVACA = SIRKA_KARTY/3;
private final ArrayList <JButton> mainMenu;
private final Font typPisma;
private static Game game;
private Table table;
private String nameOfTheWinner;
private Panel panel;
public static void main(String args[]){
Game.game=new Game();
game.setPreferredSize(new Dimension(Game.SIRKA_OKNA,Game.VYSKA_OKNA));
game.setUndecorated(true);
game.setResizable(false);
game.pack();
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setLocationRelativeTo(null);
game.setVisible(true);
}
public Game(){
typPisma = new Font("TimesRoman", Font.PLAIN, 10);
mainMenu = new ArrayList<>();
GridLayout rozlozenie = new GridLayout(6,2,50,50);
JButton newGame = new JButton("New Game");
JButton exitGame = new JButton("Exit Game");
this.setLayout(rozlozenie);
this.hlavneMenu.add(newGame);
this.add(newGame);
newGame.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
game.newGame();
game.zmenStavMenu(false);
}
});
hlavneMenu.add(exitGame);
this.add(exitGame);
exitGame.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
}
class Panel extends JPanel {
private Table table;
private Game game;
Panel(Table table,Game game) {
this.table= table;
this.game = game;
String menoPrvehoHraca = JOptionPane.showInputDialog(this,"Ako sa volá hráč č.1?");
String menoDruhehoHraca = JOptionPane.showInputDialog(this,"Ako sa volá hráč č.2?");
this.table= new table(this.game,this,10,menoPrvehoHraca,menoDruhehoHraca);
game.setLayout(new BorderLayout());
game.add(this, BorderLayout.CENTER);
System.out.println("Vytvoril sa panel");
}
public void paintComponent(Graphics g) {
if (this.table!= null) {
g.setFont(typPisma);
this.table.paint(g);
}
if(game.nameOfTheWinner!= null) {
g.setColor(Color.white);
g.fillRect(0, 0, Game.SIRKA_OKNA, Game.VYSKA_OKNA);
}
}
}
public void endOfTheGame(String nameOfTheWinner) {
JOptionPane.showMessageDialog(null,nameOfTheWinner+ " vyhral hru");
this.nameOfTheWinner= nameOfTheWinner;
this.panel.repaint();
this.table= null;
this.panel = null;
this.zmenStavMenu(true);
}
private void newGame(){
this.panel = new Panel(this.table,this);
this.nameOfTheWinner= null;
}
private void changeState(boolean state) {
for(JButton currentButton: this.mainMenu){
currentButton.setVisible(state);
currentButton.setEnabled(state);
}
}
}
您似乎正在創建一個新的Panel對象,但是您沒有將它放到任何可以看到的GUI中。它只是掛在那裏。 –
我用面板構造函數將它添加到框架中,我錯了嗎?用這個命令game.add(this,BorderLayout.CENTER); –
啊,我明白了,它的代碼沒有顯示給我們,有些類叫做Stol。 –