[Java] 用JInternalFrame实现内部窗口 内部框架 子窗口 →→→→→进入此内容的聊天室

来自 , 2020-05-11, 写在 Java, 查看 132 次.
URL http://www.code666.cn/view/e7061188
  1. import java.awt.BorderLayout;
  2. import java.awt.Container;
  3. import java.awt.Dimension;
  4. import java.awt.FlowLayout;
  5. import java.awt.Insets;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.ComponentAdapter;
  9. import java.awt.event.ComponentEvent;
  10. import java.beans.PropertyVetoException;
  11.  
  12. import javax.swing.JButton;
  13. import javax.swing.JDesktopPane;
  14. import javax.swing.JFrame;
  15. import javax.swing.JInternalFrame;
  16. import javax.swing.JMenuBar;
  17. import javax.swing.JMenuItem;
  18. import javax.swing.JPanel;
  19. import javax.swing.SwingUtilities;
  20. import javax.swing.plaf.basic.BasicInternalFrameUI;
  21.  
  22. /**
  23.  * MDIFrame is a frame using JInternalFrame to implements MDI as Word on
  24.  * Windows.
  25.  *
  26.  * @author Cheng
  27.  * @version 1.0.0 for GPF MDI test
  28.  */
  29. @SuppressWarnings("serial")
  30. public class MDIFrame extends JFrame {
  31.  
  32.         /** The desktop pane. */
  33.         final JDesktopPane desktopPane = new JDesktopPane();
  34.  
  35.         /** The operation pane with restore and close buttons. */
  36.         final JPanel opPane = new JPanel();
  37.  
  38.         /**
  39.          * Instantiates a new mDI frame.
  40.          */
  41.         public MDIFrame() {
  42.                 setTitle("MDI Frame");
  43.                 setSize(600, 550);
  44.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  45.  
  46.                 final JMenuBar bar = new JMenuBar();
  47.                 JMenuItem exit = new JMenuItem("Exit");
  48.                 exit.addActionListener(new ActionListener() {
  49.  
  50.                         @Override
  51.                         public void actionPerformed(ActionEvent e) {
  52.                                 System.exit(0);
  53.                         }
  54.  
  55.                 });
  56.                 bar.add(exit);
  57.                 // operation pane with two button, set invisible at first
  58.                 opPane.setLayout(new FlowLayout(FlowLayout.TRAILING));
  59.                 JButton restore = new JButton("#");
  60.                 restore.setMargin(new Insets(0, 0, 0, 0));
  61.                 restore.setPreferredSize(new Dimension(15, 15));
  62.                 restore.addActionListener(new ActionListener() {
  63.  
  64.                         @Override
  65.                         public void actionPerformed(ActionEvent e) {
  66.                                 InnerFrame i = (InnerFrame) desktopPane.getSelectedFrame();
  67.                                 try {
  68.                                         // notice this method, when JInternalFrame set maximun false
  69.                                         // this internal frame will be set as old size
  70.                                         i.setMaximum(false);
  71.                                 } catch (PropertyVetoException ex) {
  72.                                         ex.printStackTrace();
  73.                                 }
  74.                                 i.showNorthPanel();
  75.                                 opPane.setVisible(false);
  76.                         }
  77.  
  78.                 });
  79.                 opPane.add(restore);
  80.                 JButton close = new JButton("X");
  81.                 close.setMargin(new Insets(0, 0, 0, 0));
  82.                 close.setPreferredSize(new Dimension(15, 15));
  83.                 close.addActionListener(new ActionListener() {
  84.  
  85.                         @Override
  86.                         public void actionPerformed(ActionEvent e) {
  87.                                 JInternalFrame i = desktopPane.getSelectedFrame();
  88.                                 i.dispose();
  89.                                 opPane.setVisible(false);
  90.                         }
  91.  
  92.                 });
  93.                 opPane.add(close);
  94.                 bar.add(opPane);
  95.                 opPane.setVisible(false);
  96.                 setJMenuBar(bar);
  97.  
  98.                 Container content = getContentPane();
  99.                 content.add(desktopPane, BorderLayout.CENTER);
  100.                 final JPanel ctrlPane = new JPanel();
  101.                 JButton add = new JButton("add");
  102.                 add.addActionListener(new ActionListener() {
  103.  
  104.                         @Override
  105.                         public void actionPerformed(ActionEvent e) {
  106.                                 InnerFrame iFrame = new InnerFrame();
  107.                                 iFrame.setVisible(true);
  108.                                 desktopPane.add(iFrame);
  109.                         }
  110.  
  111.                 });
  112.                 ctrlPane.add(add);
  113.                 content.add(ctrlPane, BorderLayout.SOUTH);
  114.                 setVisible(true);
  115.         }
  116.  
  117.         /**
  118.          * The Class InnerFrame.
  119.          */
  120.         class InnerFrame extends JInternalFrame {
  121.  
  122.                 /** The is hidden. */
  123.                 boolean isHidden = false;
  124.  
  125.                 /** The old ui. */
  126.                 BasicInternalFrameUI oldUi = null;
  127.  
  128.                 /**
  129.                  * Instantiates a new inner frame.
  130.                  */
  131.                 public InnerFrame() {
  132.                         oldUi = (BasicInternalFrameUI) getUI();
  133.                         setSize(200, 200);
  134.                         maximizable = true;
  135.                         closable = true;
  136.                         addComponentListener(new ComponentAdapter() {
  137.                                 public void componentResized(ComponentEvent e) {
  138.                                         InnerFrame selectedFrame = (InnerFrame) e.getSource();
  139.                                         if (selectedFrame.isMaximum()) {
  140.                                                 selectedFrame.hideNorthPanel();
  141.                                                 opPane.setVisible(true);
  142.                                                 try {
  143.                                                         selectedFrame.setMaximum(true);
  144.                                                 } catch (PropertyVetoException ex) {
  145.                                                         ex.printStackTrace();
  146.                                                 }
  147.                                         }
  148.                                 }
  149.                         });
  150.                 }
  151.  
  152.                 /**
  153.                  * Hide north panel.
  154.                  */
  155.                 public void hideNorthPanel() {
  156.                         ((BasicInternalFrameUI) this.getUI()).setNorthPane(null);
  157.                         this.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
  158.                         isHidden = true;
  159.                 }
  160.  
  161.                 /**
  162.                  * Show north panel.
  163.                  */
  164.                 public void showNorthPanel() {
  165.                         this.setUI(oldUi);
  166.                         this.putClientProperty("JInternalFrame.isPalette", Boolean.FALSE);
  167.                         isHidden = false;
  168.                 }
  169.  
  170.                 /*
  171.                  * (non-Javadoc)
  172.                  *
  173.                  * @see javax.swing.JInternalFrame#updateUI()
  174.                  */
  175.                 public void updateUI() {
  176.                         super.updateUI();
  177.                         if (isHidden) {
  178.                                 hideNorthPanel();
  179.                         }
  180.                 }
  181.         }
  182.  
  183.         /**
  184.          * The main method.
  185.          *
  186.          * @param args
  187.          *            the arguments
  188.          */
  189.         public static void main(String[] args) {
  190.                 SwingUtilities.invokeLater(new Runnable() {
  191.  
  192.                         @Override
  193.                         public void run() {
  194.                                 new MDIFrame();
  195.                         }
  196.  
  197.                 });
  198.         }
  199. }

回复 "用JInternalFrame实现内部窗口 内部框架 子窗口"

这儿你可以回复上面这条便签

captcha