athrunwang

          紀元
          數據加載中……
          jdk7.0 新特性
          jdk7 增加了一個JLayer,用于在控件上方繪制一個新的圖層。當然jdk6里只要在paint里也能做到,不過新特性方便了很多,最少你可以方便的為Jdk代碼添加這些新特性。
          public class Diva {   
          public static void main(String[] args) {
          javax.swing.SwingUtilities.invokeLater(new Runnable() {
          public void run() { createUI(); } }); }
          public static void createUI() {
          JFrame f = new JFrame ("Diva"); LayerUI<JPanel> layerUI = new SpotlightLayerUI();
          JPanel panel = createPanel(); JLayer<JPanel> jlayer = new JLayer<JPanel>(panel, layerUI);
          f.add (jlayer); f.setSize(300, 200);
          f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
          f.setLocationRelativeTo (null); f.setVisible (true); }
          private static JPanel createPanel() { JPanel p = new JPanel();
          ButtonGroup entreeGroup = new ButtonGroup(); JRadioButton radioButton;
          p.add(radioButton = new JRadioButton("Beef", true)); entreeGroup.add(radioButton);
          p.add(radioButton = new JRadioButton("Chicken")); entreeGroup.add(radioButton);
          p.add(radioButton = new JRadioButton("Vegetable")); entreeGroup.add(radioButton);
          p.add(new JCheckBox("Ketchup")); p.add(new JCheckBox("Mustard"));
          p.add(new JCheckBox("Pickles")); p.add(new JLabel("Special requests:"));
          p.add(new JTextField(20)); JButton orderButton = new JButton("Place Order");
          p.add(orderButton); return p; } }
          class SpotlightLayerUI extends LayerUI<JPanel> {
          private boolean mActive; private int mX, mY;
          @Override public void installUI(JComponent c) {
          super.installUI(c); JLayer jlayer = (JLayer)c;
          jlayer.setLayerEventMask( AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK ); }
          @Override public void uninstallUI(JComponent c) { JLayer jlayer = (JLayer)c; jlayer.setLayerEventMask(0);
          super.uninstallUI(c); }
          @Override public void paint (Graphics g, JComponent c) { Graphics2D g2 = (Graphics2D)g.create();
          // Paint the view. super.paint (g2, c); if (mActive) {
          // Create a radial gradient, transparent in the middle.
          java.awt.geom.Point2D center = new java.awt.geom.Point2D.Float(mX, mY);
          float radius = 72; float[] dist = {0.0f, 1.0f};
          Color[] colors = {new Color(0.0f, 0.0f, 0.0f, 0.0f), Color.BLACK};
          RadialGradientPaint p = new RadialGradientPaint(center, radius, dist, colors);
          g2.setPaint(p); g2.setComposite(AlphaComposite.getInstance(
          AlphaComposite.SRC_OVER, .6f)); g2.fillRect(0, 0, c.getWidth(), c.getHeight()); }
          g2.dispose(); } @Override protected void processMouseEvent(MouseEvent e, JLayer l) {
          if (e.getID() == MouseEvent.MOUSE_ENTERED) mActive = true;
          if (e.getID() == MouseEvent.MOUSE_EXITED) mActive = false; l.repaint(); }
          @Override protected void processMouseMotionEvent(MouseEvent e, JLayer l) {
          Point p = SwingUtilities.convertPoint(e.getComponent(), e.getPoint(), l); mX = p.x; mY = p.y; l.repaint(); } }

          posted on 2011-12-28 20:38 AthrunWang 閱讀(221) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 山阳县| 汤原县| 安徽省| 泸溪县| 岱山县| 新源县| 武乡县| 定远县| 醴陵市| 辉县市| 祁门县| 江都市| 定南县| 尚志市| 西乌珠穆沁旗| 个旧市| 华宁县| 寿宁县| 光泽县| 高邑县| 景谷| 浠水县| 静乐县| 仁布县| 竹山县| 河津市| 凌云县| 芮城县| 玉山县| 张掖市| 哈尔滨市| 通江县| 时尚| 曲周县| 衡水市| 苏尼特左旗| 新兴县| 自贡市| 长垣县| 伊金霍洛旗| 慈溪市|