Java2 SDK 1.5 (Tiger) [Formatted Input/Output]

Ref: J2SE 1.5 in a Nutshell

Nutshellで紹介されている次の内容についてみてみよう。
・Formatted Input
・Formatted Output

また、1.5 から追加された新しいクラス java.awt.MouseInfo についてもみてみよう。

Formatted Input

java.util.Scannerを使うと、コンソール入力をうけつけるプログラムが簡単につくれるようになる。これがあると、初学者が java.io.BufferedReaderなどを使わなくてすむので、教えるのが楽になりそうだ。java.util.Formatterクラスを用いたパターンマッチによる入力受けつけ文字列の制御もできるので、興味がある人は調べてみると良いだろう。

import java.util.Scanner;
public class FormattedInputTest {
public static void main(String[] args) {
Scanner s = Scanner.create(System.in);
System.out.print(“Input user name: “); String user = s.next();
System.out.print(“Input user age : “); int age = s.nextInt();
s.close();
System.out.println(“user:”+user+”, age:”+age);
}
}

実行結果は次の通り。

$ javac -source 1.5 FormattedInputTest.java
$ java FormattedInputTest
Input user name: hiro345
Input user age : 20
user:hiro345, age:20

Formatted Output

これまで、JavaではCのような書式付き出力ができないために、コンソールへメッセージを出力するのは結構面倒だった。1.5からは、System.out.printfメソッドで書式付き出力ができるようになったので、今までよりメッセージを簡単にフォーマットすることができるようになる。書式の詳細については、java.util.Formatterクラスを参照しよう。

import java.text.DecimalFormat;
import java.text.NumberFormat;
public class FormattedOutputTest {
public static void main(String[] args) {
String user = “hiro345”;
int point = 1000;
// 1.4 code
System.out.print(“new line\n”);
NumberFormat f = new DecimalFormat(“####0”);
f.setMinimumIntegerDigits(5);
System.out.print(“user:” + user + “, point:” + f.format(point) + “\n”);
// 1.5 code
System.out.printf(“new line\n”);
System.out.printf(“user:%s, point:%05d\n”, user, point);
}
}

実行結果は次の通り。

$ javac -source 1.5 FormattedOutputTest.java
$ java FormattedOutputTest
new line
user:hiro345, point:01000
new line
user:hiro345, point:01000

java.awt.MouseInfo

java.awt.MouseInfoクラスを使うと、画面上のマウス座標位置や接続されているマウスのボタン数などがわかる。ポーリングをしないといけないが、ある場所にマウスポインタがおかれたら画面を表示するプログラムとか、Xeyesのようなプログラムを作ることが出来るようになる。次のjava.awt.MouseInfo動作確認用プログラムは、ここまで紹介したクラスを利用して作成した。

import java.awt.PointerInfo;
import java.awt.MouseInfo;
import java.util.Scanner;
public class MouseInfoTest implements Runnable {
private volatile Thread runner = null;
private int INTERVAL = 1000;
public void start() {
if (runner == null) {
runner = new Thread(this);
}
runner.start();
}
public void run() {
Thread current = Thread.currentThread();
while (current == runner) {
PointerInfo p = MouseInfo.getPointerInfo();
int x = p.getLocation().x;
int y = p.getLocation().y;
System.out.printf(“(x, y):(%2d, %2d)\n”, x, y);
try {
Thread.sleep(INTERVAL);
} catch(InterruptedException e) {
}
}
}
public void stop() {
runner = null;
}
public static void main(String[] args) {
MouseInfoTest info = new MouseInfoTest();
info.start();
System.out.println(“Please enter quit to stop this program.”);
Scanner s = Scanner.create(System.in);
String param = s.next();
info.stop();
s.close();
}
}

動作させるには、次のようにする。Ctrl-Cで停止させても良いのだが、いちおう停止する手段を提供すると言うことで、quitという文字列を入力して[Enter]キーをいれると停止するようにしてみた。ただ、マウスの情報がこまめに出力されてくるのでちょっとわかりにくい。マウスの情報はウィンドウ表示の方がよかったかも。(^^;

$ javac -source 1.5 MouseInfoTest.java
$ java MouseInfoTest
Please enter quit to stop this program.
(x, y):(569, 47)
(x, y):(569, 47)
quit
$
同じカテゴリの記事: Java