Mega Code Archive

 
Categories / Java / Swing JFC
 

Build multiple document interface by yourself

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.Hashtable; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JLayeredPane; import javax.swing.JPanel; import javax.swing.LookAndFeel; import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.MatteBorder; import javax.swing.event.MouseInputAdapter; import javax.swing.plaf.BorderUIResource; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.FontUIResource; public class LayeredPaneDemo extends JFrame {   public LayeredPaneDemo() {     super("");     setSize(570, 400);     getContentPane().setBackground(new Color(244, 232, 152));     getLayeredPane().setOpaque(true);     InnerFrame[] frames = new InnerFrame[5];     for (int i = 0; i < 5; i++) {       frames[i] = new InnerFrame("InnerFrame " + i);       frames[i].setBounds(50 + i * 20, 50 + i * 20, 200, 200);       getLayeredPane().add(frames[i]);     }     WindowListener l = new WindowAdapter() {       public void windowClosing(WindowEvent e) {         System.exit(0);       }     };     addWindowListener(l);     setVisible(true);   }   public static void main(String[] args) {     new LayeredPaneDemo();   } } class InnerFrame extends JPanel {   private static String IMAGE_DIR = "mdi" + java.io.File.separator;   private static ImageIcon PRESS_RESTORE_BUTTON_ICON = new ImageIcon(       IMAGE_DIR + "pressrestore.gif");   private static ImageIcon PRESS_ICONIZE_BUTTON_ICON = new ImageIcon(       IMAGE_DIR + "pressiconize.gif");   private static final int WIDTH = 200;   private static final int HEIGHT = 200;   private static final int TITLE_BAR_HEIGHT = 25;   private static Color TITLE_BAR_BG_COLOR = new Color(108, 190, 116);   private String title;   private JLabel titleLabel;   private boolean isIconified;   private JPanel titlePanel;   private JPanel contentPanel;   private JPanel buttonPanel;   private JPanel buttonWrapperPanel;   private InnerFrameButton iconizeButton;   private InnerFrameButton closeButton;   public InnerFrame(String t) {     title = t;     setLayout(new BorderLayout());     createTitleBar();     contentPanel = new JPanel();     add(titlePanel, BorderLayout.NORTH);     add(contentPanel, BorderLayout.CENTER);   }   public void toFront() {     if (getParent() instanceof JLayeredPane)       ((JLayeredPane) getParent()).moveToFront(this);   }   public void close() {     if (getParent() instanceof JLayeredPane) {       JLayeredPane jlp = (JLayeredPane) getParent();       jlp.remove(InnerFrame.this);       jlp.repaint();     }   }   public void setIconified(boolean b) {     isIconified = b;     if (b) {       setBounds(getX(), getY(), WIDTH, TITLE_BAR_HEIGHT);     } else {       setBounds(getX(), getY(), WIDTH, HEIGHT);       revalidate();     }   }   public boolean isIconified() {     return isIconified;   }   // Title Bar   public void createTitleBar() {     titlePanel = new JPanel() {       public Dimension getPreferredSize() {         return new Dimension(InnerFrame.WIDTH,             InnerFrame.TITLE_BAR_HEIGHT);       }     };     titlePanel.setLayout(new BorderLayout());     titlePanel.setOpaque(true);     titlePanel.setBackground(TITLE_BAR_BG_COLOR);     titleLabel = new JLabel(title);     titleLabel.setForeground(Color.black);     buttonWrapperPanel = new JPanel();     buttonWrapperPanel.setOpaque(false);     buttonPanel = new JPanel(new GridLayout(1, 2));     buttonPanel.setOpaque(false);     buttonPanel.setAlignmentX(0.5f);     buttonPanel.setAlignmentY(0.5f);     buttonWrapperPanel.add(buttonPanel);     titlePanel.add(titleLabel, BorderLayout.CENTER);     titlePanel.add(buttonWrapperPanel, BorderLayout.EAST);     InnerFrameTitleBarMouseAdapter iftbma = new InnerFrameTitleBarMouseAdapter(         this);     titlePanel.addMouseListener(iftbma);     titlePanel.addMouseMotionListener(iftbma);   }   // title bar mouse adapter for frame dragging   class InnerFrameTitleBarMouseAdapter extends MouseInputAdapter {     InnerFrame innerFrame;     int xDifference, yDifference;     boolean isDragging;     public InnerFrameTitleBarMouseAdapter(InnerFrame inf) {       innerFrame = inf;     }     public void mouseDragged(MouseEvent e) {       if (isDragging)         innerFrame.setLocation(e.getX() - xDifference + getX(), e.getY()             - yDifference + getY());     }     public void mousePressed(MouseEvent e) {       innerFrame.toFront();       xDifference = e.getX();       yDifference = e.getY();       isDragging = true;     }     public void mouseReleased(MouseEvent e) {       isDragging = false;     }   }   // custom button class for title bar   class InnerFrameButton extends JButton {     Dimension size;     public InnerFrameButton(ImageIcon ii) {       super(ii);       size = new Dimension(ii.getIconWidth(), ii.getIconHeight());       setOpaque(false);       setContentAreaFilled(false);       setBorder(null);     }     public Dimension getPreferredSize() {       return size;     }     public Dimension getMinimumSize() {       return size;     }     public Dimension getMaximumSize() {       return size;     }   } } class InnerFrameUI extends javax.swing.plaf.PanelUI {   private static InnerFrameUI frameUI;   protected static Color DEFAULT_TITLE_BAR_BG_COLOR;   protected static Color DEFAULT_SELECTED_TITLE_BAR_BG_COLOR;   protected static Color DEFAULT_TITLE_BAR_FG_COLOR;   protected static Color DEFAULT_SELECTED_TITLE_BAR_FG_COLOR;   protected static Font DEFAULT_TITLE_BAR_FONT;   protected static Border DEFAULT_INNER_FRAME_BORDER;   protected static Icon DEFAULT_FRAME_ICON;   private static Hashtable myDefaults = new Hashtable();   static {     myDefaults.put("InternalFrame.inactiveTitleBackground",         new ColorUIResource(108, 190, 116));     myDefaults.put("InternalFrame.inactiveTitleForeground",         new ColorUIResource(Color.black));     myDefaults.put("InternalFrame.activeTitleBackground",         new ColorUIResource(91, 182, 249));     myDefaults.put("InternalFrame.activeTitleForeground",         new ColorUIResource(Color.black));     myDefaults.put("InternalFrame.titleFont", new FontUIResource(         "Dialog", Font.BOLD, 12));     myDefaults.put("InternalFrame.border", new BorderUIResource(         new MatteBorder(4, 4, 4, 4, Color.blue)));   }   public static ComponentUI createUI(JComponent c) {     LookAndFeel currentLF = UIManager.getLookAndFeel();     if (frameUI == null)       frameUI = new InnerFrameUI();     try {       frameUI.installDefaults();       InnerFrame frame = (InnerFrame) c;       frame.setBorder(DEFAULT_INNER_FRAME_BORDER);       if (frame.isShowing())         frame.repaint();     } catch (Exception ex) {       System.err.println(ex);       ex.printStackTrace();     }     return frameUI;   }   public void installUI(JComponent c) {     InnerFrame frame = (InnerFrame) c;     super.installUI(frame);   }   public void uninstallUI(JComponent c) {     super.uninstallUI(c);   }   protected void installDefaults() {     DEFAULT_TITLE_BAR_BG_COLOR = (Color) findDefaultResource("InternalFrame.inactiveTitleBackground");     DEFAULT_TITLE_BAR_FG_COLOR = (Color) findDefaultResource("InternalFrame.inactiveTitleForeground");     DEFAULT_SELECTED_TITLE_BAR_BG_COLOR = (Color) findDefaultResource("InternalFrame.activeTitleBackground");     DEFAULT_SELECTED_TITLE_BAR_FG_COLOR = (Color) findDefaultResource("InternalFrame.activeTitleForeground");     DEFAULT_TITLE_BAR_FONT = (Font) findDefaultResource("InternalFrame.titleFont");     DEFAULT_INNER_FRAME_BORDER = (Border) findDefaultResource("InternalFrame.border");     DEFAULT_FRAME_ICON = (Icon) findDefaultResource("InternalFrame.icon");   }   protected Object findDefaultResource(String id) {     Object obj = null;     try {       UIDefaults uiDef = UIManager.getDefaults();       obj = uiDef.get(id);     } catch (Exception ex) {       System.err.println(ex);     }     if (obj == null)       obj = myDefaults.get(id);     return obj;   }   public void paint(Graphics g, JComponent c) {     super.paint(g, c);     if (c.getBorder() != null)       c.getBorder().paintBorder(c, g, 0, 0, c.getWidth(), c.getHeight());   }   public Color getTitleBarBkColor() {     return DEFAULT_TITLE_BAR_BG_COLOR;   }   public Color getSelectedTitleBarBkColor() {     return DEFAULT_SELECTED_TITLE_BAR_BG_COLOR;   }   public Color getTitleBarFgColor() {     return DEFAULT_TITLE_BAR_FG_COLOR;   }   public Color getSelectedTitleBarFgColor() {     return DEFAULT_SELECTED_TITLE_BAR_FG_COLOR;   }   public Font getTitleBarFont() {     return DEFAULT_TITLE_BAR_FONT;   }   public Border getInnerFrameBorder() {     return DEFAULT_INNER_FRAME_BORDER;   } }