阅读(3599) (0)

Java Swing MDI

2017-01-09 19:23:21 更新

Java Swing教程 - Java Swing MDI


MDI代表多文档接口。在MDI应用程序中,打开一个主窗口,并在主窗口中打开多个子窗口。

在MDI应用程序中,我们可以打开多个框架,这些框架将是JInternalFrame类的实例。

我们可以以多种方式组织多个内部框架。 例如,我们可以最大化和最小化它们; 我们可以以平铺的方式并排查看它们,或者我们可以以级联形式查看它们。

以下是我们将在MDI应用程序中使用的四个类:

  • JInternalFrame
  • JDesktopPane
  • DesktopManager
  • JFrame

JInternalFrame类的实例充当在其父窗口的区域内显示的子窗口。

JInternalFrame类的实例充当在其父窗口的区域内显示的子窗口。...

要监听窗口事件(如激活,停用等),我们需要向JInternalFrame添加一个InternalFrameListener,而不是一个用于JFrame的WindowListener。

下面的代码显示了如何使用一个实例JInternalFrame类:

String title = "A Child   Window"; 
Boolean  resizable = true;
Boolean  closable = true; 
Boolean  maximizable = true; 
Boolean  iconifiable = true; 
JInternalFrame iFrame = new JInternalFrame(title, resizable, closable, maximizable, iconifiable);

使用添加组件到iFrame

iFrame.add(...)

打包eth框架,使其可见

iFrame.pack(); 
iFrame.setVisible(true);

JDesktopPane用作所有JInternalFrame的容器。它使用空布局管理器。

JDesktopPane   desktopPane = new JDesktopPane();
// Add all  JInternalFrames to the   desktopPane 
desktopPane.add(iFrame);

我们可以使用其getAllFrames()方法获取添加到JDesktopPane的所有JInternalFrames。

JInternalFrame[] frames   = desktopPane.getAllFrames();

我们可以使用其getAllFrames()方法获取添加到JDesktopPane的所有JInternalFrames。...

DefaultDesktopManager实现DesktopManager接口。

桌面管理器有很多有用的方法。 例如,要以编程方式关闭内部框架,请使用其closeFrame()方法。

desktopPane.getDesktopManager().closeFrame(frame1);

以下代码演示了如何开发MDI应用程序。

import java.awt.BorderLayout;
import java.awt.Dimension;
/*from  w w  w. j av a2 s. co  m*/
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class Main extends JFrame {
  private final JDesktopPane desktopPane = new JDesktopPane();

  public Main() {
    JInternalFrame frame1 = new JInternalFrame("Frame 1", true, true, true,
        true);

    JInternalFrame frame2 = new JInternalFrame("Frame 2", true, true, true,
        true);

    frame1.getContentPane().add(new JLabel("Frame 1  contents..."));
    frame1.pack();
    frame1.setVisible(true);

    frame2.getContentPane().add(new JLabel("Frame 2  contents..."));
    frame2.pack();
    frame2.setVisible(true);

    int x2 = frame1.getX() + frame1.getWidth() + 10;
    int y2 = frame1.getY();
    frame2.setLocation(x2, y2);

    desktopPane.add(frame1);
    desktopPane.add(frame2);

    this.add(desktopPane, BorderLayout.CENTER);

    this.setMinimumSize(new Dimension(300, 300));
  }
  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
      e.printStackTrace();
    }
    SwingUtilities.invokeLater(() -> {
      Main frame = new Main();
      frame.pack();
      frame.setVisible(true);
      frame.setExtendedState(frame.MAXIMIZED_BOTH);
    });
  }
}