import java.beans.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.plaf.LayerUI;
class WaitingLayerUI extends LayerUI<JComponent>
{
private boolean isRunning;
private int angle;
{
super.paint(g, c);
int w = c.getWidth();
int h = c.getHeight();
if (!isRunning)
return;
g2.fillRect(0, 0, w, h);
g2.setComposite(urComposite);
int s
= Math.
min(w , h
) / 5;
int cx = w / 2;
int cy = h / 2;
g2.
rotate(Math.
PI * angle
/ 180, cx, cy
);
for (int i = 0; i < 12; i++)
{
float scale = (11.0f - (float)i) / 11.0f;
g2.drawLine(cx + s, cy, cx + s * 2, cy);
g2.
rotate(-Math.
PI / 6, cx, cy
);
}
g2.dispose();
}
public void start()
{
if (isRunning)
return;
isRunning = true;
timer
= new Timer(100, e
-> {
if (isRunning)
{
firePropertyChange("crazyitFlag", 0 , 1);
angle += 6;
if (angle >= 360)
angle = 0;
}
});
timer.start();
}
public void stop()
{
isRunning = false;
firePropertyChange("crazyitFlag", 0 , 1);
timer.stop();
}
, JLayer layer)
{
if (pce.getPropertyName().equals("crazyitFlag"))
{
layer.repaint();
}
}
}
public class WaitingJLayerTest
{
public void init()
{
group.add(radioButton);
group.add(radioButton);
group.add(radioButton);
p.add(orderButton);
final WaitingLayerUI layerUI = new WaitingLayerUI();
JLayer<JComponent> layer = new JLayer<JComponent>(p, layerUI);
final Timer stopper
= new Timer(4000, ae
-> layerUI.
stop());
stopper.setRepeats(false);
orderButton.addActionListener(ae -> {
layerUI.start();
if (!stopper.isRunning())
{
stopper.start();
}
});
f.add(layer);
f.setSize(300, 170);
f.
setDefaultCloseOperation (JFrame.
EXIT_ON_CLOSE);
f.setVisible (true);
}
public static void main
(String[] args
)
{
new WaitingJLayerTest().init();
}
}