Swing/DebugGraphics のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DebugGraphics へ行く。
- 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

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);
解説
- 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を使ってデバッグ>