DebugGraphicsを使用してJComponentの描画をデバッグする
Total: 641
, Today: 3
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
Graphics
のサブクラスであるDebugGraphics
を使用してJComponent
の描画をデバッグします。
Screenshot
Advertisement
サンプルコード
String[] columnNames = {"String", "Integer", "Boolean"};
Object[][] data = {
{"aaa", 12, true}, {"bbb", 5, false}, {"ccc", 92, true}
};
TableModel model = new DefaultTableModel(data, columnNames) {
@Override public Class<?> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
};
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
RepaintManager repaintManager = RepaintManager.currentManager(table);
repaintManager.setDoubleBufferingEnabled(false);
table.setDebugGraphicsOptions(DebugGraphics.BUFFERED_OPTION
| DebugGraphics.FLASH_OPTION
| DebugGraphics.LOG_OPTION);
View in GitHub: Java, Kotlin解説
JComponent#paintComponent(Graphics)
などの描画で使用するGraphics
をそのサブクラスであるDebugGraphics
に変更して描画を数回赤色で点滅したり速度を遅くしてデバッグを行うJComponent#setDebugGraphicsOptions(...)
で以下のようなオプションを設定すれば自動的にDebugGraphics
が使用されるよう変更されるDebugGraphics.LOG_OPTION
テキスト・メッセージを出力するDebugGraphics.FLASH_OPTION
描画を数回点滅させるDebugGraphics.BUFFERED_OPTION
View
のオフスクリーン・バッファで実行された処理を表示するExternalWindow
を作成するDebugGraphics.NONE_OPTION
デバッグを無効にする- 値がゼロの場合はデバッグ・オプションを変更しない
DebugGraphics
を使用する場合、コンポーネントのダブルバッファリング設定をオフにする必要があるRepaintManager repaintManager = RepaintManager.currentManager(component); repaintManager.setDoubleBufferingEnabled(false);
- 上記のサンプルでは
JTable
の描画を遅くしてデバッグしている- デバッグ用に描画速度が遅くなるので、たとえば
WindowsLookAndFeel
でフォーカスボーダーの点線を描画すると1
ドットごとにウェイトを入れて描画されるので長時間マウス操作などを受け付けなくなる
- デバッグ用に描画速度が遅くなるので、たとえば
参考リンク
- DebugGraphics (Java Platform SE 8)
- JComponent#setDebugGraphicsOptions(...) (Java Platform SE 8)
- ドキュメントでは「debugOptions - コンポーネントが情報を表示する方法を指定するオプション。次のうちのいずれか」となっているが、実際は「次に挙げる各オプションのビット単位の論理和」が正しい気がする
- Swingコンポーネントの再描画をJXLayerのDebugPainterを使ってデバッグ>