当事件改变组件的内容时,我遇到了问题,例如更改JLabel的名称,从Jpanel删除按钮,然后添加另一个组件。
这是我最初的JFrame。
以下是我的JFrame在每次发生事件时组件重叠的情况。
我正在使用此代码暂时解决我的问题,但当然只需调整大小就不是一个好主意。
setSize(panelWidth + 1, panelHeight + 1);
setSize(panelWidth, panelHeight);
我想知道是什么导致了这个问题,我该如何解决这个问题呢?
注意:我正在使用布局管理器。带按钮的面板使用网格布局,其他大多数使用网格布局。
更新:删除setOpaque(true)
会修复面板顶部的重叠。剩下的是带按钮的面板。我使用的GridLayout
只有一列。
以下是我在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);
}
答案 0 :(得分:5)
其中一个可能的问题是非常简单的代码剪切
private void initializeProductMenuButtons() {
pnlButtons.removeAll();
pnlButtons.add(btnSearchProduct);
pnlButtons.add(btnViewIndividual);
pnlButtons.add(btnAlternative);
pnlButtons.add(btnDisplayInfo);
pnlButtons.add(btnCancel);
}
应该是
private void initializeProductMenuButtons() {
pnlButtons.removeAll();
pnlButtons.add(btnSearchProduct);
pnlButtons.add(btnViewIndividual);
pnlButtons.add(btnAlternative);
pnlButtons.add(btnDisplayInfo);
pnlButtons.add(btnCancel);
pnlButtons.revalidate();
pnlButtons.repaint();
}
Swings API没有任何通知容器的内容被更改
e.g。 JComponents
被删除,删除和添加,某些类型的重新布局(更改顺序,e.i。)
revalidate();
和repaint();
将通知已使用的LayoutManager
,在完成对Swing GUI的所有更改后将其用作最后的代码行
没有切肉刀
编辑第一。