2015-06-30 79 views
1

我已經編寫了下面的代碼來處理Jinternalframe被最小化或最大化的事件。當JInternalFrame被最大化/最小化時被觸發的事件

jif.addComponentListener(new ComponentListener() { 
     public void componentResized(ComponentEvent e) { 
      Boolean isMax = ((JInternalFrame)e.getComponent()).isMaximum(); 

      if(isMax == false) 
      { 
       // TODO Auto-generated method stub 
      } 
      else if(isMax == true) 
      {    
       // TODO Auto-generated method stub 
      }    
     } 

    public void componentMoved(ComponentEvent e) { 
     // TODO Auto-generated method stub 

    } 

    public void componentShown(ComponentEvent e) { 
     // TODO Auto-generated method stub 

    } 

    public void componentHidden(ComponentEvent e) { 
     // TODO Auto-generated method stub 

    } 
     } 
    );   

的問題是,isMax部分被框架加載時觸發。我只希望在Jinternalframe完全加載後發生這個事件。另外我注意到這個事件觸發時,我最小化容器小程序。

有沒有解決方法?

回答

2

你也許能夠使用PropertyChangeListenerInternalFrameListener

import java.awt.*; 
import java.awt.event.*; 
import java.beans.*; 
import javax.swing.*; 
import javax.swing.event.*; 

public class InternalFrameEventTest { 
    public JComponent makeUI() { 
    final JDesktopPane desktop = new JDesktopPane(); 
    JPanel p = new JPanel(new BorderLayout()); 
    p.add(desktop); 
    p.add(new JButton(new AbstractAction("New") { 
     @Override public void actionPerformed(ActionEvent e) { 
     JInternalFrame f = new JInternalFrame("title", true, true, true, true); 
     InternalFrameHandler handler = new InternalFrameHandler(); 
     f.addInternalFrameListener(handler); 
     f.addPropertyChangeListener(handler); 
     f.setSize(240, 120); 
     f.setVisible(true); 
     desktop.add(f); 
     } 
    }), BorderLayout.NORTH); 
    return p; 
    } 
    public static void main(String... args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override public void run() { 
     createAndShowGUI(); 
     } 
    }); 
    } 
    public static void createAndShowGUI() { 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    f.getContentPane().add(new InternalFrameEventTest().makeUI()); 
    f.setSize(320, 240); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    } 
} 

class InternalFrameHandler implements PropertyChangeListener, InternalFrameListener { 
    //PropertyChangeListener 
    @Override public void propertyChange(PropertyChangeEvent e) { 
    if (JInternalFrame.IS_MAXIMUM_PROPERTY.equals(e.getPropertyName())) { 
     System.out.println("isMaximum: " + e.getNewValue()); 
    } 
    } 
    //InternalFrameListener 
    @Override public void internalFrameClosing(InternalFrameEvent e) { 
    System.out.println("internalFrameClosing"); 
    } 
    @Override public void internalFrameClosed(InternalFrameEvent e) { 
    System.out.println("internalFrameClosed"); 
    } 
    @Override public void internalFrameOpened(InternalFrameEvent e) { 
    System.out.println("internalFrameOpened"); 
    } 
    @Override public void internalFrameIconified(InternalFrameEvent e) { 
    System.out.println("internalFrameIconified"); 
    } 
    @Override public void internalFrameDeiconified(InternalFrameEvent e) { 
    System.out.println("internalFrameDeiconified"); 
    if (e.getInternalFrame().isMaximum()) { 
     System.out.println("isMaximum: " + e.getInternalFrame().isMaximum()); 
    } 
    } 
    @Override public void internalFrameActivated(InternalFrameEvent e) { 
    System.out.println("internalFrameActivated"); 
    } 
    @Override public void internalFrameDeactivated(InternalFrameEvent e) { 
    System.out.println("internalFrameDeactivated"); 
    } 
} 
相關問題