我確實有我放置3個板像隱藏的JPanel沒有打破布局
- 主面板
- 左圖
- 右側面板
展位屏幕面板將有父面板大小的一半。 我想隱藏左側面板,而不會破壞佈局。並且不需要修改佈局管理器(這在我的需求'BorderLayout'中以某種方式硬編碼)。右側面板仍應具有主面板一半的尺寸。
我的解決方案: 我重寫了paint方法並添加了一個布爾型'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個按鈕在屏幕下面的測試用例。一個用於改變可見性狀態,另一個用於隱藏狀態。
展臺面板隱藏並未顯示。如果我現在按下'可視性'按鈕,則在隱藏面板的區域中繪製按鈕。如果我用鼠標光標手動更改大小,repaint事件刷新隱藏的面板,並將錯誤繪製的對象刪除。
- 我該如何處理這些情況?
- 有人有更好的解決方案嗎?
如果您有佈局問題,請在佈局領域解決它_not_在繪製代碼。爲什麼不能使用適合您需求的LayoutManager? – kleopatra