2016-08-08 8 views
0

私はスイングで新しくハングマンゲームで作業しています。したがって、動作するはずのやり方は、ユーザーが3秒間持続するメッセージを歓迎するように促され、消えてから次のフレームにユーザーを送信することです。私はそれを実行すると、最初のフレームがまだ目に見えて、次のフレームに行くにしても影で動いていることを除いて、すべてが完全に動作しています。私はdisposeメソッドを使用しようとしましたが、次のフレームに行くことなくフレームを閉じるだけです。ここ は、私が最初のフレームに.setVisible(false)を試してみてください、これまでJavaスイングJFrameが実行中に他のJframeに影を落とす

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import javax.swing.Timer; 

public class PA1test extends JFrame{ 

public static void main(String[] args) { 

    // opens the first page 
    JFrame gui = new JFrame("Hangman"); 
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    gui.add(new First_PageImage()); 
    gui.pack(); 
    gui.setVisible(true); 


    // action to open the second page  
    ActionListener taskPerformer = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent evt) { 
      //...Perform a task... 
      JFrame secpage = new JFrame("Hangman"); 
      secpage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      secpage.add(new SecondPage()); 
      secpage.pack(); 
      secpage.setVisible(true); 
     } 
    }; 

    // set timer to perform action after 3 seconds 
    Timer timer = new Timer(3000 ,taskPerformer); 
    timer.setRepeats(false); 
    timer.start();  

} 

}

+2

が見ましょう(http://stackoverflow.com/q/9554636/4475997) – MasterBlaster

+0

が可能でした[複数jframes良いか悪い習慣の使用は?]間違っているが、これはスプラッシュスクリーンのように聞こえる。@MasterBlaster – copeg

+0

@copeg *とリンクしているディスカッションとは違うと思う。*そのような場合は、['SplashScreen'](http: //docs.oracle.com/javase/8/docs/api/java/awt/SplashScreen.html)! –

答えて

0

を行っている私のものです。

+0

これを行うと、最初のフレームが表示されません – ThisIsMi

+0

2番目のフレームを表示した後、タイマータスクでそれを行う必要があります。あなたはおそらく変数にアクセスするだけでいくつかの困難にぶつかるでしょう。一番下の行は、最初のフレームが目に見えないことです。次のフレームが開く前に単に遅延を作成しようとしているのであれば、Thread.sleep()を見てください。それははるかに簡単になるでしょうし、あなたは2番目のフレームを表示するためにタスクタイマーを使用しなければなりません。 – slambeth

+0

また、最初の "スプラッシュ"画面で何をしているのか、JDialogはもっと適切かもしれません。 – slambeth

2

いくつかのポイント:

  1. JFrame.EXIT_ON_CLOSEに処分の操作を設定するには、アプリケーション全体を終了します。 JFrame.DISPOSE_ON_CLOSE
  2. あなたはスプラッシュスクリーンを作成したいような音を使用することを検討してください - あなたの目的は、スプラッシュスクリーンであり、あなたは(2)からのスプラッシュ画面でJFrameJDialogではなく、Javaのビルドを使用する場合は、Oracleのtutorial on using the SplashScreen class
  3. を読んでみて、デコレーション(setUndecorated(true))とセンタリング(setLocationRelativeTo(null);
  4. 初期JFrame /スプラッシュを廃棄/非表示にするには、タイマーが起動した後に行う必要がありますTimerのActionListener実装内から行う - 匿名クラス内からスプラッシュスクリーンインスタンスにアクセスするには、maそれは最終的なものです。

擬似コード:

final JFrame splashScreen = new JFrame("Hangman");//mark as final for visibility's sake 
splashScreen.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

ActionListener taskPerformer = new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent evt) { 
     //logic to create the main UI frame here 
     splashScreen.dispose(); 
    } 
}; 

// set timer to perform action after 3 seconds 
Timer timer = new Timer(3000 ,taskPerformer); 
timer.setRepeats(false); 
timer.start(); 
+0

フィードバックに感謝します。私は代わりにJFrameしたいです。私はオプション3と一緒に行くつもりです。私は別の問題に遭遇しないことを願っています。 – ThisIsMi

関連する問題