JFrame であるグローバル変数フレームがあります。
public static void setUp(final Wheel []player, final phraser p) throws IOException {
final JPanel scorePanel=new JPanel();
final JPanel namePanel=new JPanel();
panel=new JPanel(new GridLayout(1,player.length,1,1));
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel(new GridLayout(2,1,1,1));
panel3.add(new JLabel("Dead letters/phrases:"));
panel3.add(LettersOrPhGuessed);
JMenuBar menuBar=new JMenuBar();
frame.setJMenuBar(menuBar);
clock=new JMenu();
JMenu file=new JMenu("File");
JMenuItem exit=new JMenuItem("Exit");
JMenuItem reset=new JMenuItem("Reset");
file.add(exit);
file.add(reset);
menuBar.add(file);
menuBar.add(clock);
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
reset.addActionListener(new ActionListener(){//help me
public void actionPerformed(ActionEvent e){
frame.removeAll();
frame.validate();
frame.setVisible(false);
try {
startApp();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
//for spinner
spinQuote.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!first){
String result="You have already spun: "+check;
JOptionPane.showMessageDialog(null,result);
}
else
check=player[whichPlayer].spin();
pause=false;
}
});
//to buy a vowel
buyVowel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
buyVow=true;
if(player[whichPlayer].getPotentialScore()>=250||player[whichPlayer].getTurnScore()>=250){
buyVowel(player,whichPlayer,p);
}
else
JOptionPane.showMessageDialog(null,"Sorry, you don't have enough money to buy a vowel");
pause=false;
}
});
//to solve baord
solv.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
pause=false;
solvBoard=true;
boolean temp=false;
while(temp==false){
enterSolution();
if(cancelAnswer){
pause2=false;
go=true;
return;
}
else if(guess.equals("-1")){
JOptionPane.showMessageDialog(null,"Sorry, you took too long");
temp=true;
}
else if(guess.length()>1){
if(p.checkGuessedAnswer(guess))
JOptionPane.showMessageDialog(null,"Sorry, that phrase has already been guessed");
else if(player[whichPlayer].checkForWin(guess)){
newGame=true;
replaceCorrectLetter(underScores,guess);
player[whichPlayer].setFinalScore(player[whichPlayer].getFinalScore()+player[whichPlayer].getPotentialScore()+player[whichPlayer].getTurnScore());
JOptionPane.showMessageDialog(null,"Congrats you won the round!");
whichPlayer=0;
temp=true;
}
else{
JOptionPane.showMessageDialog(null,"Sorry, better luck next time!");
p.addGuessedAnswer(guess);
LettersOrPhGuessed.setText(p.getAlreadyGuessed()+"");
temp=true;
}
}
else
JOptionPane.showMessageDialog(null,"Sorry,That is an invalid guess!");
}
go=false;
pause2=false;
}
});
scorePanel.add(new JLabel("Score Board:"));
panel4 = test;
panel4.setSize(800, 600);//this does nothing in the program
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
namePanel.add(playerName,gbc);
frame.getContentPane().add(namePanel, gbc);
frame.getContentPane().add(scorePanel, gbc);
frame.getContentPane().add(panel, gbc);
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
frame.getContentPane().add(panel4, gbc);
gbc.weighty = 0;
gbc.fill = GridBagConstraints.HORIZONTAL;
frame.getContentPane().add(panel2, gbc);
frame.getContentPane().add(panel1, gbc);
frame.getContentPane().add(panel3, gbc);
frame.setVisible(true);
}
startApp メソッド
public static void startApp() throws IOException{
howManyPlayers();
Wheel[] player=new Wheel[numberOfPlayers];
fixScore(player);
phraser p=new phraser();
answer=p.pickPhrase();
for(int i = 0; i < player.length; i++) {
player[i] = new Wheel(answer);
}
setUp(player,p);
setName(player);
scoreBoard(player);
panel2.add(buyVowel);
panel2.add(spinQuote);
panel2.add(solv);
int gamesplayed=0;
while(gamesplayed<3){
if(gamesplayed!=0)
intializeAnswer(player,p);
underScores=drawSpaces();
check=0;
whichPlayer=0;
newGame=false;
test.intializeWheel();
p.setPositionStart(0);
while(newGame==false){
go=true;
intro(player);
nextTurn=false;
cancelGuess=false;
cancelAnswer=false;
first=true;
while(go){
int starter=p.getPositionStart();
playerName.setText("It is "+player[whichPlayer].getName()+"'s turn!");
pause=true;
pause2=true;
while(pause){//makes sure user hits spin or solve before it does anything
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (pause==false){
if(solvBoard==false&&buyVow==false&&cancelGuess==false)
test.spinner(starter,player[whichPlayer].getPosition());//wheel thing
break;
}
}
cancelGuess=false;
cancelAnswer=false;
if(buyVow){buyVow=false;}
else if(solvBoard){
while(pause2){//makes sure to pause for user
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (pause2==false)
break;
}
solvBoard=false;
}
else if(check==-1){
JOptionPane.showMessageDialog(null,"Bankrupt!" );
player[whichPlayer].setTurnScore(0);
player[whichPlayer].setPotentialScore(0);
go=false;
}
else if(check==-2){
JOptionPane.showMessageDialog(null,"Sorry, you lost your turn!");
player[whichPlayer].setTurnScore(0);
go=false;
}
else if(check==-3){
JOptionPane.showMessageDialog(null,"Spin again!");
}
else{
if(first)
JOptionPane.showMessageDialog(null,"You spun: "+check);
go=interpretAnswer(player,underScores,p);
}
if(newGame==false)
updateScoreBoardInTurn(player);
p.setPositionStart(player[whichPlayer].getPosition());
}
if(newGame==false){
player[whichPlayer].setPotentialScore((player[whichPlayer].getPotentialScore()+player[whichPlayer].getTurnScore()));
updateScoreBoard(player);
if(whichPlayer==player.length-1)
whichPlayer=0;
else
whichPlayer++;
}
player[whichPlayer].setTurnScore(0);
}
for(int i=0;i<player.length;i++){
player[i].setPotentialScore(0);
}
updateScoreBoardAfter(player);
clear(underScores);
reset(player,p);
LettersOrPhGuessed.setText(p.getAlreadyGuessed()+"");
gamesplayed++;
}
calcWinner(player);
results(player);
}
ご覧のとおり、actionListener をリセット ボタンに追加しましたが、startApp() を呼び出してフレームを完全に再起動する方法がわかりません。私の問題は、リセットしたときにフレームがめちゃくちゃになって戻ってきて、何も機能しないことです。助言がありますか??