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

时间:2014-02-28 12:55:35

标签: java swing user-interface

当事件改变组件的内容时,我遇到了问题,例如更改JLabel的名称,从Jpanel删除按钮,然后添加另一个组件。

这是我最初的JFrame。 Normal frame

以下是我的JFrame在每次发生事件时组件重叠的情况。 Normal frame

我正在使用此代码暂时解决我的问题,但当然只需调整大小就不是一个好主意。

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);
}

1 个答案:

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

    1. e.g。 JComponents被删除,删除和添加,某些类型的重新布局(更改顺序,e.i。)

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

  • 没有你的SSCCEMCVE/MCTRE

  • 没有切肉刀

编辑第一。