これは Windows マシンではテストしていないので、Mac マシンでのみテストしたことに注意してください。これがWindowsマシンでも発生するかどうかはわかりません...
Java アプリケーションのサイズを変更すると、コンテンツが見えなくなります。サイズ変更後に修正する方法はすでに見つけましたが、ユーザーがウィンドウのサイズを変更している間は修正できませんでした。
Swing などを使用していないのは、バイナリが非常に遅くなるためです (私の意見では)。
構造は次のようになります。
Frame
私のメインウィンドウContaine
rのコンテンツ ビューmain-window
Container
-メソッドを含む -ベースのpaint(Graphics g)
サブビュー
すべてのリスナーを追加したので、ウィンドウのサイズを変更した後にコンテンツ ビューMy main-window
を再描画できるようになりました。
public void componentResized(ComponentEvent e) {
this.contentView.paint(this.contentView.getGraphics());
}
-methodを使用することpaint(getGraphics())
はこれを行うのにあまり良い方法ではないことに注意してくださいrepaint()
。
サイズ変更中は、ペイントされたすべてのコンテンツが非表示になります。ただし、Button
-instance を myに追加してContent-view
サイズを変更するMain-window
と、ボタンが非表示になりません。
「ライブ」サイズ変更イベントを追跡できます。
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
}
- サイズ変更を開始すると、このメソッドは呼び出されません。
- サイズ変更中に、ウィンドウのサイズを変更するピクセルごとにログに「Live-resize」が生成されます。
- このメソッドが呼び出されていないサイズ変更を停止すると、componentResized-method が呼び出されます。
このように「ライブ」サイズ変更イベントに再描画メソッド (または公式の再描画メソッド) を追加すると、出力は得られますが、再描画などではありません。
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
this.contentView.paint(this.contentView.getGraphics());
}
または
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
this.contentView.repaint();
}
アプリケーションをドックに最小化し、アプリケーションを再度最大化すると、同じことが起こります。これを修正するには、同じコードが必要だと思います。
私はGraphics2D
何かを使用していませんGraphics
。
ビューを再描画する方法を教えてください。
前もってありがとう、ティム