ふと思いついたのでオラクル社が提供しているチュートリアルをやってみた。
Java版
package start;
/*
* HelloWorldSwing.java requires no other files.
*/
import javax.swing.*;
public class HelloWorldSwing {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Clojure版
(ns start.core
(:import [javax.swing JFrame JLabel SwingUtilities]))
(defn start []
(let [frame (JFrame. "HelloWorldSwing")
label (JLabel. "Hello World")]
(-> frame .getContentPane (.add label))
(doto frame (.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE) .pack (.setVisible true))))
- Clojure版の方はreplからstart関数を呼ぶだけで結果が確認できるのでmain関数を書かなかった。
- Clojure版の方は(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)するとreplを道連れにしてしまうのでDISPOSE_ON_CLOSEとした。