【问题标题】:updating view only after changing the size of JFrame仅在更改 JFrame 的大小后更新视图
【发布时间】:2010-11-19 21:28:27
【问题描述】:

所以我有一个 JFrame,在其中我有一个 JScrollPane,在 JScrollPane 里面我有一个 JPanel。我有一个按钮单击鼠标侦听器,它修改 JScrollPane 内的 JPanel。鼠标监听器中的代码是:

@Override
    public void mouseClicked(MouseEvent arg0) {

            searchResult.updateInfo();

        }

方法 updateInfo 正在将一堆 JPanel 添加到 searchResult JPanel 中。单击与此侦听器关联的按钮后,没有任何反应,但是当我调整 JFrame 的大小时..它会更新视图..这是为什么?

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

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

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

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

    如果首选大小大于滚动窗格的大小,就会出现滚动条。

    【讨论】:

    • 这是因为 LayoutManager 仅在第一次渲染时被询问如何布局组件。您必须通过调用revalidate() 来告诉组件要求 LayoutManager 再次执行此操作,如此处所述。
    【解决方案2】:

    制作 searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); 如果它不起作用,请像这样 searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); searchResult.repaint();

    【讨论】:

    • 对不起,我只是更新了我上面的代码.. 结果我真正想要的 mouseClicked 只是在 searchResult 上调用 updateInfo.. 我上面解释的这个方法只是添加了一堆面板 tp搜索结果JPanel
    • 没问题,重要的是你已经解决了你的问题,祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多