有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何报告面板更改为父容器?

我有一个面板被一个动作改变了,它把它的子面板换成了一个最小尺寸不同的新面板。我需要通知我的JSplitPane它的一个子面板已更改,以便我可以调用updateToPreferedSize方法。是否有已经触发的事件需要我倾听?如果没有,我如何抛出一个家长可以捕捉到的事件来通知它


共 (2) 个答案

  1. # 1 楼答案

    我不确定,但我不认为这也应该起作用:

    panel.revalidate();
    panel.repaint();
    
  2. # 2 楼答案

    最简单的方法是在调出子对象的面板上触发自定义propertyChange事件,这样在调出子对象之后,它就会触发事件。这里有一个很好的例子: http://download.oracle.com/javase/tutorial/javabeans/properties/bound.html

    完成此操作后,JSplitpane可以注册一个侦听器并侦听该属性,如下所述: http://download.oracle.com/javase/tutorial/uiswing/events/propertychangelistener.html

    总之,在交换子级的面板中,您需要初始化PropertyChangeSupport:

    private final PropertyChangeSupport pcs = new PropertyChangeSupport( this );
    

    然后,当您调出面板时:

    //All code to swap out the panel goes here
    this.pcs.firePropertyChange( "childUpdated", false, true );
    

    在JSplitPane中,你需要这样的东西:

    //...where initialization occurs:
    ...
    amountField.addPropertyChangeListener("childUpdated",
                                          new ChildUpdateListener());
    ...
    class ChildUpdateListener implements PropertyChangeListener {
        public void propertyChanged(PropertyChangeEvent e) {
            updateToPreferedSize();
        }
    }