【发布时间】:2014-02-28 21:37:01
【问题描述】:
当事件将更改组件的内容时,我遇到了问题,例如更改 JLabel 的名称、从 Jpanel 中删除按钮然后添加另一个组件。
这是我最初的 JFrame。
这是每次发生事件时组件重叠时我的 JFrame 的外观。
我正在使用这段代码来临时解决我的问题,但是仅仅调整大小当然不是一个好主意。
setSize(panelWidth + 1, panelHeight + 1);
setSize(panelWidth, panelHeight);
我想知道是什么导致了这个问题,我该如何解决这个问题?
注意:我正在使用布局管理器。带有按钮的面板使用网格布局,而其他大多数面板都使用网格包布局。
更新:删除setOpaque(true) 修复顶部面板上的重叠。剩下的是带有按钮的面板。我使用的 GridLayout 只有 1 列。
这是我在pnlButtons 处显示按钮的一些代码。
private void initializeShoppingModeButtons() {
pnlButtons.removeAll();
pnlButtons.add(btnSearchProduct);
pnlButtons.add(btnManualInput);
pnlButtons.add(btnCheckOut);
}
private void initializeProductMenuButtons() {
pnlButtons.removeAll();
pnlButtons.add(btnSearchProduct);
pnlButtons.add(btnViewIndividual);
pnlButtons.add(btnAlternative);
pnlButtons.add(btnDisplayInfo);
pnlButtons.add(btnCancel);
}
【问题讨论】:
-
你是用
LayoutManager还是给null Layout添加组件? -
当组件不遵守不透明约定时,可能会发生这种问题。
-
是的,我正在使用布局管理器。
-
没有一些代码几乎不可能分辨出来。
-
pnlButtons.removeAll();然后 pnlButtons.revalidate() 和 repaint() 必须作为最后的代码行调用,在对可见 Swing GUI 的所有更改完成后
标签: java swing user-interface