Java 仅在更改JFrame的大小后更新视图

Java 仅在更改JFrame的大小后更新视图,java,swing,jframe,Java,Swing,Jframe,我有一个JFrame,里面有一个JScrollPane,在JScrollPane里面有一个JPanel。我有一个点击鼠标的监听器,它在JScrollPane中修改JPanel。鼠标侦听器中的代码是: @Override public void mouseClicked(MouseEvent arg0) { searchResult.updateInfo(); } updateInfo方法是将一堆JPanel添加到搜索结果JPanel中。单击与

我有一个JFrame,里面有一个JScrollPane,在JScrollPane里面有一个JPanel。我有一个点击鼠标的监听器,它在JScrollPane中修改JPanel。鼠标侦听器中的代码是:

@Override
    public void mouseClicked(MouseEvent arg0) {

            searchResult.updateInfo();

        }
updateInfo方法是将一堆JPanel添加到搜索结果JPanel中。单击与此侦听器关联的按钮后,什么都不会发生,但当我调整JFrame的大小时。。它会更新视图。。为什么会这样

我尝试重新绘制JFrame,但它没有解决我的问题

make

searchResult.removeAll();
searchResult.updateInfo();
searchResult.validate();
如果不行,就这样做

searchResult.removeAll();
searchResult.updateInfo();
searchResult.validate();
searchResult.repaint();

从可见GUI添加/删除组件后,您需要告诉面板布局组件,以便重新计算首选大小。您需要添加:

searchResult.revalidate();
searchResult.repaint(); // sometimes needed

然后,如果首选大小大于滚动窗格的大小,将显示滚动条。

对不起,我只是更新上面的代码。。事实证明,我真正想要的是在我的鼠标中调用searchResult上的updateInfo。。正如我上面所解释的,这个方法只是在searchResult JPanelno问题上添加了一堆面板tp,重要的是你已经解决了你的问题,祝你好运。这是因为LayoutManager只是在第一次渲染时才被问到如何布局组件。您必须告诉组件,通过调用
revalidate()
,让LayoutManager再次执行此操作。