1

ここで新しい - 私の最初の質問。とにかく、私がここにいるのは、10000 ミリ秒の時間が設定されている JFrame を作成したいからです。それが閉じると、別の (別のクラスにある) 別のフレームが開くはずです。「時間指定されたJFrameを閉じて別のものを開く」部分ではなく、すでにタイマー部分を実行しました。

私はこれをしたことを覚えていて、答えを見つけました。NewClass.show()('NewClass' は開くべきクラス名です) のようになり、次に入力しますOldClass.dispose()('OldClass' は閉じるべきクラス名です)。

これまでの私のコードは次のとおりです。

import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class SplashScreen extends JPanel {

public SplashScreen() {
 setOpaque(false);
 setLayout(new FlowLayout());
}

public static void main(String[] args) {

    final JFrame frame = new JFrame("Loading game...");
    frame.setSize(800, 600);
    frame.setResizable(false);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    SplashScreen background = new SplashScreen();
    frame.add(background);

    Timer timer = new Timer(10000, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            frame.setVisible(false);
            frame.dispose();
           //I want to place my code here so then this class will close, and then the other class will open
        }
    });
    timer.setRepeats(false);
    timer.start();

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage("Waiting.png");
    Point hotSpot = new Point(0,0);
    Cursor cursor = toolkit.createCustomCursor(image, hotSpot, "Cursor");
    frame.setCursor(cursor);

    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    int w = frame.getSize().width;
    int h = frame.getSize().height;
    int x = (dim.width - w) / 2;
    int y = (dim.height - h) / 2;

    frame.setLocation(x, y);

    JButton button = new JButton();

    JPanel panel = new JPanel();

}

public void paint(Graphics g) {
    Image a=Toolkit.getDefaultToolkit().getImage("Splash Screen.gif");
    g.drawImage(a,0,0,getSize().width,getSize().height,this);
    super.paint(g);

    }
}

私は 2 番目のクラスを作成しませんでした ('LoadingScreen.class' と呼ばれますが、'JSomethings' など (JFrame、JPanel など) だけを含むクラスにする予定です)。

2 番目のクラスを作成できますが、タイマーが 10 秒または 10000 ミリ秒で終了した後に最初のクラスを閉じてから、2 番目のクラスを自動的に開くだけです。

ありがとう

4

3 に答える 3

1

以下のように、2 番目のクラスに呼び出しを追加してみてください

Timer timer = new Timer(10000, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        frame.setVisible(false);
        frame.dispose();
       //I want to place my code here so then this class will close, and then the other class will open

       //SplashScreen screen = new SplashScreen();
       //screen.showGUI();
    }
});

もう 1 つの良い方法はframe.setVisible(true)、最後に呼び出すことです。これにより、画面上のフレーム位置にドリフトが見られなくなります。

于 2013-02-28T09:21:40.323 に答える
0

2番目のクラスが次のようになっているとします。

public class LoadingScreen extends JFrame   
{    
    public LoadingScreen(String title)  
    {   
        super(title);  
    }

    public void showGUI()   
    {
        //  Do whatever you want
        setSize(500,500);
        setVisible(true);
    }
}

電話するだけで、

LoadingScreen loadScreen = new LoadingScreen("Loading screen....");
loadscreen.showGUI();
于 2013-02-28T11:19:16.857 に答える