2015-06-30 8 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

Вы можете быть в состоянии использовать PropertyChangeListener и InternalFrameListener:

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"); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^