简体   繁体   English

当JInternalFrame最大化/最小化时触发的事件

[英]Event that gets fired when a JInternalFrame is maximized/minimized

I have written the following code to handle an event incase a Jinternalframe is minimized or maximized. 我编写了以下代码来处理事件,以防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

    }
      }
    );        

The problem is that the isMax part gets triggered when the frame loads. 问题在于,框架加载时会触发isMax部分。 I want this event to happen only after the Jinternalframe is completely loaded. 我希望仅在Jinternalframe完全加载后才发生此事件。 Also i have noticed this event triggers when i minimize the container applet. 我也注意到当我最小化容器applet时会触发此事件。

Is there any workaround for this? 有什么解决方法吗?

You might be able to use a PropertyChangeListener and InternalFrameListener : 您可能可以使用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");
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM