Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

new Timer()

new Timer(C00, L00)はフレームでしか使用できないのでしょうか?

14

回答

79295

閲覧

14件の回答

評価

0

試してみましょう。

評価

0

TimerTask task = new TimerTask() {
        public void run() {
            System.out.println("Wake Up");
        }
    });
 
    Timer timer = new Timer();
    timer.schedule(task, 10000L, 5000L);
のような使用方法もあることがわかりました。

評価

0

すみません。やはりいまだにTimerの使い方がわかりません。どなたかわかるかたいらっしゃいますか?

評価

0

>Timerの使い方がわかりません。

Timerを具体的にどのように使いたいのでしょうか?
>new Timer(C00, L00)
このタイマーはjavax.swing.Timerで

>timer.schedule(task, 10000L, 5000L);
のタイマーはjava.util.Timerです。
目的によって使い分けます。

元質問のnew Timer(C00, L00)の使い方は
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/Timer.html
ここに詳しく書いてあります。
簡単にいうと、ActionListenerに指定時間ごとにアクションイベントを通知します。

なにが分からないのか、具体的に書いてみましょう。

評価

0

回答ありがとうございます。
具体的にいうと、画像を表示しながら指定時間ごとに回転させるプログラムを作りたいと思っています。
public class Sample2 extends JFrame {
    
    public static void main(String[] A00) {
        JFrame L00 = new Sample2();
        Toolkit.getDefaultToolkit().setDynamicLayout(true);/*ウィンドウ内部を描画しながらサイズ変更できる*/
        L00.setDefaultCloseOperation(EXIT_ON_CLOSE);/*ウィンドウを閉じたときに自動的にプログラムを終了する*/
        L00.setSize(200, 200);                        /*ウィンドウのサイズ*/
        L00.setVisible(true);
    }
    public Sample2() {
        Sample L00 = new Sample();
        add(L00);
        new Timer(30,L00).start();
    }
}
class Sample extends Applet implements ActionListener{
    Image I00;
    int I01;
    int I02;
    int I03 = 0;
    
    public Sample() {
        I00 = new ImageIcon("jp/tuyano/eclipsebook4/針.jpg").getImage();
        I01 = I00.getWidth(this);
        I02 = I00.getHeight(this);
    }/*LOOの情報*/
    
    public void actionPerformed(ActionEvent e) {
        I03 = (I03+1) % 360;
        repaint();
    }

    public void paint(Graphics g) {
        Graphics2D L00 = (Graphics2D)g;
        g.setColor(Color.white);
        L00.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.black);
        L00.rotate(I03 * 16 / 180, getWidth() / 2.0, getHeight() / 2.0);
        L00.drawImage(I00, (getWidth() - I01) / 2, (getHeight() - I02) / 2, this);
       
    }
}

のようなサンプルを拝見したんですが、timerはフレームにしか使用できないんでしょうか?

評価

0

えっと、書き方が悪かったようですね、お手間をとらせました。

>具体的にいうと、画像を表示しながら指定時間

については、わかっています。

>やはりいまだにTimerの使い方がわかりません。

の書き込みから。
>timerはフレームにしか使用できないんでしょうか?
について、何かしら調べたのだと思いましたので・・
具体的にどこで引っかかっているのですか?
ということが聞きたかったのです。

評価

0

たびたび申し訳ございません。
new Timer(30,L00).start()についてなんですが、30msecごとにactionPerformedを呼び出していることは理解できたのですが、L00(←フレーム?)しか引用できないんでしょうか?

評価

0

うーん
まだ、試してはいないのですね?
フレーム以外でも使えますよ、何に対して使いたいんですか?
再度掲示しますが
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/javax/swing/Timer.html
ここを読んでください。

読んでみてわからないところや、試してみてわからない所があれば質問してみてください。
掲示板でTimerに関して一から全部説明するわけにはいきません。

評価

0

timerはフレーム以外にも使えることは理解できたのですが、//milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { //...Perform a task... } の部分が理解できません。どういった意味なんでしょうか?アクションリスナーを2番目の引数にしているということなんでしょうか?

評価

0

無名クラスを勉強しましょう。

評価

0

ゆさんが難しいと仰っている所は、理解するまで本当に難しい所です。
入門書では、リスナー追加時の呪文として覚えましょうってな記述があるものもあるぐらいです。(笑)

mioさんが仰るように、無名クラスで検索すれば、なにか答えが見つかるかもしれません。
イベントとかその辺とのからみなので、GUIをもうちょっと順番に勉強すれば解ってくるところなんだろうけど。

他のサイトでも(以前の)質問を拝見してましたけど、けっこう難しいことをされているので、もう少しGUIなどの基本的な所を勉強されるといいのになあと思ってます。
スレッドを使ったアニメーションとかね。
GUIの基本の参考書には、たいがい載っていますよ。

評価

0

よく見るとTimerが発行されているのはJFrameではなくて
Appletですね、それはこの際置いといて。

>アクションリスナーを2番目の引数にしている
そういうことですね。

無名クラスは、ボタンにActionListenerを登録したりする
時など便利に使えます。
無名クラスについてはこの辺を参考にしてください。
http://www.javaroad.jp/java_class15.htm

とりあえず無名クラスとTimerのサンプルを・
といってもほぼJavaDocのサンプルのままですが・・

ActionListener taskPerformer = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        System.out.println("TimeUp");
    }
};
new Timer(1000, taskPerformer).start();
#javax.swing.Timerコンストラクタの第2引数はActionListenerです。

これを、メインでもいいし、コンストラクタでもいいので
どこか1回だけ実行されるところにおいて、実行してみてください。
ちゃんと動きますよね?

変形すると、こんな風にも書けます。
new Timer(1000, new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        System.out.println("TimeUp");
    }
}).start();

あくまでサンプルで、どこでも実行できることが示したかっただけです。

ちなみに
new ActionListener() {};は、そのインタフェースの型を持った
名前を持たないクラスを定義し、インスタンスを生成していることを
表します。

提示されている、class Sample extends Applet implements ActionListener
クラスは名前付きのクラスですがActionListenerをインプリメント
しているのでTimerの第2引数に指定できますね。

つまりActionListenerをインプリメントしているクラスであれば
無名であれ、名前付きであれTimerイベントを発行できるということを示しています。

私のこれまでの経験では、頭で理解していても実際にプログラムを
書いて動かしてみないとなかなか身につきません。
ある程度理解できたら間違っていても構わないので
エラーアンドトライ、カットアンドトライでやった方が応用が
きくようになりますし、身に付きます。
なので、どんどんプログラムを組んでトライすることを
おすすめします。

評価

0

ActionListener taskPerformer = new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        System.out.println("TimeUp");
    }
};
の最後のセミコロンはどういった意味なんでしょうか?コンパイルがとおらないんですが

評価

0

別に問題ないし、コンパイル通りますよ。

無名クラスについて調べましたか?

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。