我已經做了一個Java的小數猜測遊戲。我的主要JFrame(主菜單)有三個JButtons,Play,Sound和Exit。如何從JOptionPane返回主菜單(JFrame)
按下播放按鈕開始我的遊戲,一系列JOptionPanes出現要求用戶輸入數字。它工作正常,遊戲運行正常。但是當我按下播放按鈕來玩遊戲時,我無法按下游戲中的退出按鈕或聲音按鈕或任何其他按鈕。我甚至無法按下主JFrame窗口的X(關閉)按鈕,直到我完全玩完遊戲,或關閉JOptionPane以關閉當前遊戲。
我可以按退出按鈕,當我已經按下聲音按鈕啓動背景聲音。當我已經按下聲音按鈕時,我可以按播放按鈕。
有什麼建議嗎?
我的問題是,假設我正在使用JOptionPanes如何按即存在於我的主要的JFrame(主菜單)Jbutton將在 一個的JOptionPane已經打開
這裏的一個小遊戲是我SSCCE
import javax.swing.*;
import java.awt.event.*;
class Test2 {
static JFrame frame;
static JPanel jp;
static JButton b1;
static JButton b2;
static JButton b3;
public static void main(String[] args) {
final long startTime = System.currentTimeMillis();
frame=new JFrame("Game ");
jp=new JPanel();
b1=new JButton("Play");
b1.addActionListener (new Action());
b2=new JButton("Exit");
b2.addActionListener (new Action1());
b3=new JButton("Sound");
b3.addActionListener (new Action2());
jp.add(b1);
jp.add(b2);
jp.add(b3);
frame.add(jp);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,400);
frame.setVisible(true);
}
static class Action implements ActionListener { // For (game) Play button
public void actionPerformed (ActionEvent e) {
Thread bb=new Thread(new Runnable(){
public void run(){
new Test2().start();
}});
bb.setPriority(1);
bb.start();
}
}
static class Action1 implements ActionListener { // For Exit button
public void actionPerformed (ActionEvent e) {
Thread tt=new Thread(new Runnable(){
public void run(){
int response = JOptionPane.showConfirmDialog(
null,
"Exit application?",
"Confirm",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (response == JOptionPane.NO_OPTION) {
}
else if (response == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
tt.setPriority(10);
tt.start();
}
}
static class Action2 implements ActionListener { //For Sound Button
public void actionPerformed (ActionEvent e) {
try {
/* Code to play sound */
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
void start() { // sample game
JOptionPane.showMessageDialog(null,"Step 1 ..click OK to continue");
JOptionPane.showMessageDialog(null,"Step 2 ..click OK to continue");
JOptionPane.showMessageDialog(null,"Step 3 ..click OK to continue");
JOptionPane.showMessageDialog(null,"Step 4 ..click OK to continue");
JOptionPane.showMessageDialog(null,"Step 5 ..click OK to continue");
JOptionPane.showMessageDialog(null,"Step 6 ..click OK to continue");
JOptionPane.showMessageDialog(null,"Step 7 ..click OK to continue");
JOptionPane.showMessageDialog(null,"Step 8 ..click OK to continue");
}
}
在我的新的代碼只有start()方法已經改變
void start() // sample game
{
JOptionPane pane = new JOptionPane();
// Configure via set methods
dialog = pane.createDialog(null,"exp 1");
// the line below is added to the example from the docs
dialog.setSize(300, 200);
dialog.setModal(false); // this says not to block background components
JButton nextButton = new JButton("Go to Dialog2");
dialog.add(nextButton);
nextButton.setBounds(25,25,20,20);
dialog.show();
JOptionPane pane2 = new JOptionPane();
// Configure via set methods
dialog2 = pane2.createDialog(null,"exp 2");
// the line below is added to the example from the docs
dialog2.setModal(false); // this says not to block background components
// dialog2.show();
nextButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dialog2.setVisible(true);
dialog.setVisible(false);
}
});
}
* 1 )問一個*特定*問題。 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 3)不要在'JOptionPane'中放置'遊戲'。請參閱[本答案](http://stackoverflow.com/a/9554657/418556)瞭解將遊戲**置入**框架的其他策略的提示。 –
編輯我的問題 –