gih*_*ooh 0 java user-interface swing
当事件改变组件的内容时,我遇到了问题,例如更改JLabel的名称,从Jpanel删除按钮,然后添加另一个组件.
这是我最初的JFrame.

这是我的JFrame在每次有事件时组件重叠时的样子.

我正在使用此代码暂时解决我的问题,但当然这只是调整大小不是一个好主意.
setSize(panelWidth + 1, panelHeight + 1);
setSize(panelWidth, panelHeight);
Run Code Online (Sandbox Code Playgroud)
我想知道是什么导致了这个问题,我该如何解决这个问题呢?
注意:我正在使用布局管理器.带按钮的面板使用网格布局,其他大多数使用网格布局.
更新:删除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);
}
Run Code Online (Sandbox Code Playgroud)
其中一个可能的问题是非常简单的代码剪切
private void initializeProductMenuButtons() {
pnlButtons.removeAll();
pnlButtons.add(btnSearchProduct);
pnlButtons.add(btnViewIndividual);
pnlButtons.add(btnAlternative);
pnlButtons.add(btnDisplayInfo);
pnlButtons.add(btnCancel);
}
Run Code Online (Sandbox Code Playgroud)
应该
private void initializeProductMenuButtons() {
pnlButtons.removeAll();
pnlButtons.add(btnSearchProduct);
pnlButtons.add(btnViewIndividual);
pnlButtons.add(btnAlternative);
pnlButtons.add(btnDisplayInfo);
pnlButtons.add(btnCancel);
pnlButtons.revalidate();
pnlButtons.repaint();
}
Run Code Online (Sandbox Code Playgroud)
Swings API没有任何通知容器的内容被更改
例如JComponents被移除,移除和添加,某些类型的重新布局(更改顺序,ei)
revalidate();在完成对Swing GUI的所有更改后,repaint();将通知used LayoutManager,将其用作最后的代码行
没有你的SSCCE,MCVE/MCTRE没有切肉刀
编辑第1.