|
|
|
@ -3,6 +3,7 @@ package com.fr.design.mainframe;
|
|
|
|
|
import com.fr.design.gui.ilable.UILabel; |
|
|
|
|
import com.fr.design.i18n.Toolkit; |
|
|
|
|
import java.awt.AlphaComposite; |
|
|
|
|
import java.awt.BasicStroke; |
|
|
|
|
import java.awt.Color; |
|
|
|
|
import java.awt.Component; |
|
|
|
|
import java.awt.Composite; |
|
|
|
@ -11,23 +12,34 @@ import java.awt.Dimension;
|
|
|
|
|
import java.awt.Graphics; |
|
|
|
|
import java.awt.Graphics2D; |
|
|
|
|
import java.awt.LayoutManager; |
|
|
|
|
import java.awt.RenderingHints; |
|
|
|
|
import java.awt.event.ActionEvent; |
|
|
|
|
import java.awt.event.ActionListener; |
|
|
|
|
import java.awt.event.MouseAdapter; |
|
|
|
|
import java.awt.event.MouseEvent; |
|
|
|
|
import javax.swing.ImageIcon; |
|
|
|
|
import javax.swing.JComponent; |
|
|
|
|
import javax.swing.Timer; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @author hades |
|
|
|
|
* @version 10.0 |
|
|
|
|
* Created by hades on 2021/4/12 |
|
|
|
|
*/ |
|
|
|
|
public class TransparentPane extends JComponent { |
|
|
|
|
public class TransparentPane extends JComponent implements ActionListener { |
|
|
|
|
|
|
|
|
|
private static final ImageIcon LOADING_ICON = new ImageIcon(TransparentPane.class.getResource("/com/fr/web/images/loading-local.gif")); |
|
|
|
|
|
|
|
|
|
private UILabel loadingLabel; |
|
|
|
|
private UILabel label; |
|
|
|
|
private AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f); |
|
|
|
|
private volatile boolean mIsRunning; |
|
|
|
|
private volatile boolean mIsFadingOut; |
|
|
|
|
private Timer mTimer; |
|
|
|
|
private int mAngle; |
|
|
|
|
private int mFadeCount; |
|
|
|
|
private int mFadeLimit = 15; |
|
|
|
|
private int lines = 12; |
|
|
|
|
private int maxAngle = 360; |
|
|
|
|
private int angleAdd = 30; |
|
|
|
|
private double prec = 0.56; |
|
|
|
|
|
|
|
|
|
public TransparentPane() { |
|
|
|
|
|
|
|
|
@ -41,10 +53,7 @@ public class TransparentPane extends JComponent {
|
|
|
|
|
setLayout(getCoverLayout()); |
|
|
|
|
setBackground(null); |
|
|
|
|
setOpaque(false); |
|
|
|
|
|
|
|
|
|
loadingLabel = new UILabel(LOADING_ICON); |
|
|
|
|
label = new UILabel(Toolkit.i18nText("Fine-Design_Saving_Template_Tip")); |
|
|
|
|
add(loadingLabel); |
|
|
|
|
add(label); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -69,16 +78,11 @@ public class TransparentPane extends JComponent {
|
|
|
|
|
public void layoutContainer(Container parent) { |
|
|
|
|
int width = parent.getParent().getWidth(); |
|
|
|
|
int height = parent.getParent().getHeight(); |
|
|
|
|
int loadingLabelWidth = loadingLabel.getPreferredSize().width; |
|
|
|
|
int loadingLabelHeight = loadingLabel.getPreferredSize().height; |
|
|
|
|
int buttonX = (width - loadingLabelWidth) / 2; |
|
|
|
|
int buttonY = (height - loadingLabelHeight) / 2; |
|
|
|
|
int labelWidth = label.getPreferredSize().width; |
|
|
|
|
int labelHeight = label.getPreferredSize().height; |
|
|
|
|
int labelX = (width - labelWidth) / 2; |
|
|
|
|
int labelY = (height - labelHeight) / 2 + loadingLabelHeight; |
|
|
|
|
int labelY = (int) ((height - labelHeight) * prec); |
|
|
|
|
label.setBounds(labelX, labelY, labelWidth, labelHeight); |
|
|
|
|
loadingLabel.setBounds(buttonX, buttonY, loadingLabelWidth, loadingLabelHeight); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@ -90,13 +94,69 @@ public class TransparentPane extends JComponent {
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void paint(Graphics g) { |
|
|
|
|
Graphics2D g2d = (Graphics2D) g; |
|
|
|
|
Composite oldComposite = g2d.getComposite(); |
|
|
|
|
g2d.setComposite(composite); |
|
|
|
|
g2d.setColor(Color.BLACK); |
|
|
|
|
g2d.fillRect(0, 0, getWidth(), getHeight()); |
|
|
|
|
g2d.setComposite(oldComposite); |
|
|
|
|
int w = this.getWidth(); |
|
|
|
|
int h = this.getHeight(); |
|
|
|
|
super.paint(g); |
|
|
|
|
if (!mIsRunning) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
Graphics2D g2 = (Graphics2D) g.create(); |
|
|
|
|
float fade = (float) mFadeCount / (float) mFadeLimit; |
|
|
|
|
Composite urComposite = g2.getComposite(); |
|
|
|
|
g2.setComposite(composite); |
|
|
|
|
g2.fillRect(0, 0, w, h); |
|
|
|
|
g2.setComposite(urComposite); |
|
|
|
|
int s = Math.min(w, h) / 50; |
|
|
|
|
int cx = w / 2; |
|
|
|
|
int cy = h / 2; |
|
|
|
|
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); |
|
|
|
|
g2.setStroke(new BasicStroke(s / 4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); |
|
|
|
|
g2.setPaint(Color.BLACK); |
|
|
|
|
g2.rotate(Math.PI * mAngle / 180, cx, cy); |
|
|
|
|
for (int i = 0; i < lines; 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.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, scale * fade)); |
|
|
|
|
} |
|
|
|
|
g2.dispose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
|
if (mIsRunning) { |
|
|
|
|
repaint(); |
|
|
|
|
mAngle += angleAdd; |
|
|
|
|
if (mAngle >= maxAngle) { |
|
|
|
|
mAngle = 0; |
|
|
|
|
} |
|
|
|
|
if (mIsFadingOut) { |
|
|
|
|
if (--mFadeCount == 0) { |
|
|
|
|
mIsRunning = false; |
|
|
|
|
mTimer.stop(); |
|
|
|
|
} |
|
|
|
|
} else if (mFadeCount < mFadeLimit) { |
|
|
|
|
mFadeCount++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void start() { |
|
|
|
|
if (mIsRunning) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
mIsRunning = true; |
|
|
|
|
mIsFadingOut = false; |
|
|
|
|
mFadeCount = 0; |
|
|
|
|
int fps = 24; |
|
|
|
|
int tick = 1000 / fps; |
|
|
|
|
mTimer = new Timer(tick, this); |
|
|
|
|
mTimer.start(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void stop() { |
|
|
|
|
mIsRunning = false; |
|
|
|
|
mIsFadingOut = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|