我确实有我放置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