を壊すことなく、私は私が隠すJPanelのレイアウト
- メインパネル
- 左パネル
- 右側のパネル
ブースのような3枚のパネルを配置した画面を持っていますパネルは親パネルのサイズの半分になります。 レイアウトを破ることなく、左パネルを非表示にしたい。 (これは何とか私の要件 'BorderLayout'でハードコーディングされています)。右のパネルは、メインパネルのサイズの半分の大きさでなければなりません。
私の解決策: 私は塗装メソッドをオーバーライドし、ブール値「propHideContents」を追加しました。
@Override
public void paintComponents(Graphics g) {
if (propHideContents && isVisible()) {
paintBlankPanel(g);
return;
}
super.paintComponents(g);
}
@Override
protected void paintChildren(Graphics g) {
if (propHideContents && isVisible()) {
paintBlankPanel(g);
return;
}
super.paintChildren(g);
}
private void paintBlankPanel(Graphics g) {
Graphics scratchGraphics = (g == null) ? null : g.create();
try {
scratchGraphics.setColor(this.getBackground());
scratchGraphics.clipRect(0, 0, this.getWidth(), this.getHeight());
} finally {
scratchGraphics.dispose();
}
}
非表示ロジックは
public void setPropHideContents(boolean propHideContents) {
if (this.propHideContents != propHideContents) {
this.propHideContents = propHideContents;
setEnabled(!propHideContents);
if (getParent() != null) {
getParent().repaint();
}
}
}
のように見えるほぼすべてが動作しているが、私は、次のテストケース
durignリフレッシュ問題を持っている私は、画面に2つのボタンを追加しました。 1つは可視状態を変更するためのもので、もう1つは隠れた状態のものです。
ブースパネルは表示されません。 'visibility'ボタンを押すと、ボタンは非表示パネルの領域に描画されます。マウスカーソルで画面を手動でサイズを変更すると、再描画イベントが隠しパネルをリフレッシュし、間違って描画されたオブジェクトが削除されます。
- どうすればこれらのケースを処理できますか?
- 誰かがより良い解決策を持っていますか?
レイアウトに問題がある場合は、ペイントコードでレイアウト領域_not_で解決してください。ニーズに合ったLayoutManagerを使用できないのはなぜですか? – kleopatra