2010-11-19 108 views
0

所以我有一个JFrame,里面有一个JScrollPane,而JScrollPane里面有一个JPanel。我有一个按钮单击鼠标侦听器,它修改了JScrollPane中的JPanel。在小鼠听者的代码是:只有在更改JFrame的大小后才更新视图

@Override 
    public void mouseClicked(MouseEvent arg0) { 

      searchResult.updateInfo(); 

     } 

方法updateInfo时被加入一些JPanel的进入信息搜索结果的JPanel。当我点击与这个监听器关联的按钮后,什么都没有发生,但是当我调整JFrame的大小时......它更新了视图..为什么会这样呢?

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

回答

2

添加/从你需要一个可见的GUI删除组件后告诉面板布置组件,以便重新计算首选尺寸。您需要添加:

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

然后,如果首选大小大于滚动条的大小滚动条将出现。

+0

这是因为LayoutManager仅在第一次渲染时询问如何布置组件。您必须通过调用'revalidate()'来告诉组件要求LayoutManager重新执行此操作。 – ZeissS 2010-11-19 21:45:26

+0

谢谢!这解决了我的问题 – aherlambang 2010-11-19 21:49:26

0

使 searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); 如果它不工作,作出这样 searchResult.removeAll(); searchResult.updateInfo(); searchResult.validate(); searchResult.repaint();

+0

对不起,我只是更新上面的代码..事实证明我真的想在我的mouseClicked只是在searchResult上调用updateInfo ..这种方法正如我上面刚刚解释的,只是添加了一堆面板tp searchResult JPanel – aherlambang 2010-11-19 21:40:01

+0

没问题,重要的是你已经解决了你的问题,祝你好运。 – palAlaa 2010-11-19 21:54:39

相关问题