当内容更改时,Swing组件重叠

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)

mKo*_*bel 5

其中一个可能的问题是非常简单的代码剪切

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没有任何通知容器的内容被更改

    1. 例如JComponents被移除,移除和添加,某些类型的重新布局(更改顺序,ei)

    2. revalidate();在完成对Swing GUI的所有更改后,repaint();将通知used LayoutManager,将其用作最后的代码行

  • 没有你的SSCCE,MCVE/MCTRE没有切肉刀

编辑第1.