[Java] 等待界面设计 →→→→→进入此内容的聊天室

来自 , 2019-10-20, 写在 Java, 查看 127 次.
URL http://www.code666.cn/view/46031b3d
  1. import java.beans.*;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.awt.image.*;
  5. import javax.swing.*;
  6. import javax.swing.plaf.LayerUI;
  7. class WaitingLayerUI extends LayerUI<JComponent>
  8. {
  9.         private boolean isRunning;
  10.         private Timer timer;
  11.         private int angle;      
  12.         public void paint(Graphics g, JComponent c)
  13.         {
  14.                 super.paint(g, c);
  15.                 int w = c.getWidth();
  16.                 int h = c.getHeight();
  17.                 if (!isRunning)
  18.                         return;
  19.                 Graphics2D g2 = (Graphics2D)g.create();
  20.                 Composite urComposite = g2.getComposite();
  21.                 g2.setComposite(AlphaComposite.getInstance(
  22.                         AlphaComposite.SRC_OVER, .5f));
  23.                 g2.fillRect(0, 0, w, h);
  24.                 g2.setComposite(urComposite);
  25.                 int s = Math.min(w , h) / 5;
  26.                 int cx = w / 2;
  27.                 int cy = h / 2;
  28.                 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING
  29.                         , RenderingHints.VALUE_ANTIALIAS_ON);
  30.                 g2.setStroke( new BasicStroke(s / 2
  31.                         , BasicStroke.CAP_ROUND , BasicStroke.JOIN_ROUND));
  32.                 g2.setPaint(Color.BLUE);
  33.                 g2.rotate(Math.PI * angle / 180, cx, cy);
  34.                 for (int i = 0; i < 12; i++)
  35.                 {
  36.                         float scale = (11.0f - (float)i) / 11.0f;
  37.                         g2.drawLine(cx + s, cy, cx + s * 2, cy);
  38.                         g2.rotate(-Math.PI / 6, cx, cy);
  39.                         g2.setComposite(AlphaComposite.getInstance(
  40.                                 AlphaComposite.SRC_OVER, scale));
  41.                 }
  42.                 g2.dispose();
  43.         }
  44.         public void start()
  45.         {
  46.                 if (isRunning)
  47.                         return;
  48.                 isRunning = true;
  49.                 timer = new Timer(100, e -> {
  50.                         if (isRunning)
  51.                         {
  52.                                 firePropertyChange("crazyitFlag", 0 , 1);
  53.                
  54.                                 angle += 6;      
  55.                                 if (angle >= 360)
  56.                                         angle = 0;
  57.                         }
  58.                 });
  59.                 timer.start();
  60.         }
  61.         public void stop()
  62.         {
  63.                 isRunning = false;
  64.                 firePropertyChange("crazyitFlag", 0 , 1);
  65.                 timer.stop();
  66.         }
  67.         public void applyPropertyChange(PropertyChangeEvent pce
  68.                 , JLayer layer)
  69.         {
  70.                 if (pce.getPropertyName().equals("crazyitFlag"))
  71.                 {
  72.                         layer.repaint();
  73.                 }
  74.         }
  75. }
  76. public class WaitingJLayerTest
  77. {
  78.         public void init()
  79.         {
  80.                 JFrame f = new JFrame("转动的“齿轮”");
  81.                 JPanel p = new JPanel();
  82.                 ButtonGroup group = new ButtonGroup();
  83.                 JRadioButton radioButton;
  84.                 p.add(radioButton = new JRadioButton("网购购买", true));
  85.                 group.add(radioButton);
  86.                 p.add(radioButton = new JRadioButton("书店购买"));
  87.                 group.add(radioButton);
  88.                 p.add(radioButton = new JRadioButton("图书馆借阅"));
  89.                 group.add(radioButton);
  90.                 p.add(new JCheckBox("疯狂Java讲义"));
  91.                 p.add(new JCheckBox("疯狂Android讲义"));
  92.                 p.add(new JCheckBox("疯狂Ajax讲义"));
  93.                 p.add(new JCheckBox("轻量级Java EE企业应用"));
  94.                 JButton orderButton = new JButton("投票");
  95.                 p.add(orderButton);
  96.                 final WaitingLayerUI layerUI = new WaitingLayerUI();
  97.                 JLayer<JComponent> layer = new JLayer<JComponent>(p, layerUI);
  98.                 final Timer stopper = new Timer(4000, ae -> layerUI.stop());
  99.                 stopper.setRepeats(false);
  100.                 orderButton.addActionListener(ae -> {
  101.                         layerUI.start();
  102.                         if (!stopper.isRunning())
  103.                         {
  104.                                 stopper.start();
  105.                         }
  106.                 });
  107.                 f.add(layer);
  108.                 f.setSize(300, 170);
  109.                 f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  110.                 f.setVisible (true);
  111.         }
  112.         public static void main(String[] args)
  113.         {
  114.                 new WaitingJLayerTest().init();
  115.         }
  116. }

回复 "等待界面设计"

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

captcha