1 16 package org.mc4j.console.swing.graph; 17 18 import org.jdesktop.swingx.JXGlassBox; 19 20 import javax.swing.*; 21 import javax.swing.event.MouseInputAdapter ; 22 import java.awt.BorderLayout ; 23 import java.awt.Color ; 24 import java.awt.Container ; 25 import java.awt.Graphics ; 26 import java.awt.Point ; 27 import java.awt.event.ActionEvent ; 28 import java.awt.event.MouseEvent ; 29 30 34 public class GlassWindow extends JXGlassBox { 35 36 protected JPanel header; 37 protected JPanel footer; 38 protected JLabel title; 39 protected JComponent contents; 40 41 protected static GlassWindow INSTANCE = new GlassWindow(); 42 protected static JComponent currentParent; 43 44 45 46 private GlassWindow() { 47 super(0.85f); 48 initUI(); 49 } 50 51 52 private void initUI() { 53 setBorder(BorderFactory.createRaisedBevelBorder()); 54 header = new JPanel(new BorderLayout ()); 55 header.add(new JLabel("Graph Series"),BorderLayout.WEST); 56 57 JButton close = new JButton("x"); 58 close.setAction(new AbstractAction() { 59 public void actionPerformed(ActionEvent e) { 60 INSTANCE.setVisible(false); 61 } 62 }); 63 64 MoveListener listener = new MoveListener(); 65 header.addMouseListener(listener); 66 header.addMouseMotionListener(listener); 67 header.add(close, BorderLayout.EAST); 68 header.setBackground(Color.gray); 69 70 ResizeListener resizeListener = new ResizeListener(); 71 footer = new JPanel(new BorderLayout ()); 72 ResizeButton b = new ResizeButton(); 73 footer.add(b); 74 b.addMouseListener(resizeListener); 75 b.addMouseMotionListener(resizeListener); 76 } 77 78 public static class ResizeButton extends JPanel { 79 public ResizeButton() { 80 super(); 81 setSize(8,8); 82 } 83 84 public void paint(Graphics g) { 85 super.paint(g); 86 g.setColor(Color.white); 88 g.fillRect(getWidth() - 8, getHeight() - 8, 8,8); 89 g.setColor(Color.gray); 90 g.drawLine(getWidth() - 7, getHeight() - 1, getWidth() - 1, getHeight() - 7); 91 g.drawLine(getWidth() - 5, getHeight() - 1, getWidth() - 1, getHeight() - 5); 92 g.drawLine(getWidth() - 3, getHeight() - 1, getWidth() - 1, getHeight() - 3); 93 } 94 } 95 96 public class MoveListener extends MouseInputAdapter { 97 private Point last; 98 99 public void mouseClicked(MouseEvent e) { 100 last = e.getPoint(); 101 } 102 public void mouseReleased(MouseEvent e) { 103 last = null; 104 } 105 public void mouseDragged(MouseEvent e) { 106 if (last == null) { 107 last = e.getPoint(); 108 } else { 109 Point p = e.getPoint(); 110 Point newLocation = getLocation(); 111 newLocation.translate(p.x - last.x, p.y - last.y); 112 setLocation(newLocation); 113 } 114 } 115 } 116 117 public class ResizeListener extends MouseInputAdapter { 118 private Point last; 119 120 public void mouseClicked(MouseEvent e) { 121 last = e.getPoint(); 122 } 123 public void mouseReleased(MouseEvent e) { 124 last = null; 125 } 126 public void mouseDragged(MouseEvent e) { 127 if (last == null) { 128 last = e.getPoint(); 129 } else { 130 Point p = e.getPoint(); 131 setSize(getWidth() + p.x - last.x, getHeight() + p.y - last.y); 132 last = e.getPoint(); 133 } 134 } 135 } 136 137 public void setContents(JComponent contents) { 138 removeAll(); 139 setLayout(new BorderLayout ()); 140 add(header, BorderLayout.NORTH); 141 add(contents, BorderLayout.CENTER); 142 add(footer, BorderLayout.SOUTH); 143 } 144 145 146 public static void show(JComponent contents, JComponent parent) { 147 148 Container glass = (Container ) parent.getRootPane().getGlassPane(); 149 INSTANCE.setContents(contents); 150 INSTANCE.setVisible(true); 151 INSTANCE.showOnGlassPane(glass,parent,0,0,1); 152 } 153 154 } 155 | Popular Tags |