2013年09月27日(金) [長年日記]
■ [java] Javaでシステムの改行コードを取得
以前は System.getProperty("line.separator") で取得していたがJava 7ではSystem.lineSeparator()が使える、ということが検索してもあまり出てこないのでメモ。
■ [java] JOptionPaneが作るダイアログをESC押下で閉じないようにする
JOptionPaneで作ったダイアログは、ESCキーを押下すると閉じてしまう。この挙動はVIM使いにとってはイラつくケースがある。
JOptionPane optionPane = new JOptionPane();
optionPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "none");
のようにJOptionPaneのインスタンスのWHEN_IN_FOCUSED_WINDOWに対応するInputMapのESCキー押下に対する要素を上書きしたら、ESCキーを押しても閉じないダイアログを生成できた。
でもこうするのはあまりよくない気がしてきた。閉じる前に確認ダイアログを表示する方がいいか。
■ [java] JDialogのwindowClosedイベントが複数回来る
JDialogに対してwindowClosedイベントが何回も来るんだけどなんで?困る。Javaのバージョンは1.7.0_25。
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class DialogTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
test();
}
});
}
public static void test() {
JDialog dialog = new JDialog((JFrame)null, true);
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("closing");
}
@Override
public void windowClosed(WindowEvent e) {
System.out.println("closed");
}
});
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
dialog.dispose();
}
}
closing closed closed
[ツッコミを入れる]