人生、気合いと具合 - blog

2013年05月

昨日(2013/5/11)、JJUG CCC 2013 Springに参加してきました。

気になったことをいくつか。

・JavaFXのApp Store向けパッケージングツールが入りそう?(Jim Weaverさん)
プレゼン資料に載ってるそうです。(@aoetkさん情報)
発表時に言ってたかどうかは不明。

・ラムダで書くと、Hoge$1.classとかが作成されない。(桜庭さん)
無名クラスのインスタンス生成を簡単に書けるだけ、と思ってたので、当然 Hoge$1.class とか生成されると思ってたらそんなところに違いがあるとは。
ちなみに実際書いてみて、ラムダだと生成されないけど、従来どおりに無名クラスを使うと Hoge$1.class が生成されることを確認できた。

・JAX-RSでのインジェクション(蓮沼さん)
ServletContextとかのインスタンスをインジェクションできるそうな。なんか何でもできて便利そうだけど、何でもでき過ぎて怖いことになりそうな気も。

・懇親会のLT
何も資料用意してなかったので見てただけです。
でもよく考えたら、例のアドベントカレンダーのirofさんゲームの実行環境/ソースが手元のPCにあったんだから、資料なしでもなんかしゃべればよかったかも。

といったところでしょうか。

全体的にいつもより参加人数多めな感じ。
懇親会も安心して盛り上がれるし、今後も土曜開催のほうがいいんじゃないかなーというふうに見えた。(個人的にはどちらでも行けるので、平日でも大丈夫だけど)

SwingとJavaFXで、MouseClickedの発生条件が違ってました。

以下のようなコードを実行して、マウスをドラッグしてみます。

JavaFX
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class JavaFXSample extends Application{

    public static void main(String... args)throws Exception{
        Application.launch(JavaFXSample.class, args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        AnchorPane pane = new AnchorPane();
        pane.getChildren().add(new Rectangle(400, 400, Color.GREEN));
        Scene sc = new Scene(pane);
        stage.setScene(sc);
        pane.setOnMouseClicked(e -> System.out.println("MouseClicked"));
        pane.setOnMousePressed(e -> System.out.println("MousePressed"));
        pane.setOnMouseReleased(e -> System.out.println("MouseReleased"));
        stage.show();
    }
}
実行結果
MousePressed
MouseReleased
MouseClicked
Swing
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SwingSample {
    public static void main(String... args)throws Exception{
        JFrame f = new JFrame();
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(400, 400));
        panel.setBackground(Color.GREEN);
        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("MouseClicked");
            }
            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("MousePressed");
            }
            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("MouseReleased");
            }
        });
        f.setContentPane(panel);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        f.pack();
    }
}
実行結果
MousePressed
MouseReleased
というわけで、JavaFXではドラッグした場合でもMouseClickedが発生するのに対して、Swingでは発生しません。
これ、どっちが正しいとかあるんですかね...個人的にはSwingの挙動のほうが自然かなと思うんですけど。

このページのトップヘ