Swing/DebugGraphics のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DebugGraphics へ行く。
- 1 (2023-02-20 (月) 01:27:36)
- 2 (2023-02-20 (月) 11:25:55)
- category: swing folder: DebugGraphics title: DebugGraphicsを使用してJComponentの描画をデバッグする tags: [Graphics, DebugGraphics, RepaintManager, JComponent] author: aterai pubdate: 2023-02-20T01:26:44+09:00 description: GraphicsのサブクラスであるDebugGraphicsを使用してJComponentの描画をデバッグします。 image: https://drive.google.com/uc?id=1WDlKL0YJoviSNVrMmNEA08psSkb2-h1a
概要
GraphicsのサブクラスであるDebugGraphicsを使用してJComponentの描画をデバッグします。
Screenshot
![Swing/DebugGraphics screenshot](https://ateraimemo.com/swing/debuggraphics/screenshot.png)
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)
- Swingコンポーネントの再描画をJXLayerのDebugPainterを使ってデバッグ>