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