time-calc/src/main/java/rvc/timecalc/ProgressSquare.java

111 lines
3.3 KiB
Java
Raw Normal View History

2024-01-20 17:52:25 +00:00
package rvc.timecalc;
import javax.swing.JPanel;
import javax.swing.Timer;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
2024-01-21 10:22:03 +00:00
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
2024-01-20 17:52:25 +00:00
public class ProgressSquare extends JPanel {
private static final Color FOREGROUND_COLOR = new Color(220, 220, 220);
private static final Color BACKGROUND_COLOR = new Color(238, 238, 238);
private int side = 0;
private int square;
private double donePercent = 0;
2024-01-21 10:22:03 +00:00
private boolean highlight = false;
2024-01-20 17:52:25 +00:00
public ProgressSquare() {
setPreferredSize(new Dimension(400, 400));
setBackground(BACKGROUND_COLOR);
new Timer(1000, e -> repaint()).start();
2024-01-21 10:22:03 +00:00
addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
highlight = !highlight;
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
2024-01-20 17:52:25 +00:00
2024-01-21 10:22:03 +00:00
@Override
public void mouseExited(MouseEvent e) {
}
});
2024-01-20 17:52:25 +00:00
}
2024-01-21 09:14:47 +00:00
public void setDonePercent(double donePercent) {
this.donePercent = donePercent;
}
2024-01-20 17:52:25 +00:00
@Override
public void paintComponent(Graphics g) {
2024-01-21 11:07:55 +00:00
if(donePercent >= 0.99) {
highlight = true;
}
2024-01-21 09:14:47 +00:00
if (side == 0) {
2024-01-20 17:52:25 +00:00
this.side = Math.min(getWidth(), getHeight());
this.square = side * side;
}
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(FOREGROUND_COLOR);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
2024-01-21 09:14:47 +00:00
// System.out.println("square=" + square);
int dotNumber = (int) (donePercent * square);
2024-01-20 17:52:25 +00:00
int y = dotNumber / side;
int x = dotNumber - y * side;
2024-01-21 09:14:47 +00:00
// System.out.println("dotNumber=" + dotNumber);
// System.out.println("x=" + x);
// System.out.println("y=" + y);
if (y > 1) {
2024-01-21 10:22:03 +00:00
if(highlight) g2d.setColor(Color.GRAY);
2024-01-21 09:14:47 +00:00
g2d.fillRect(side - 4, side - 4, 4, 4);
g2d.fillRect(1, side - 4, 4, 4);
2024-01-21 08:00:48 +00:00
g2d.setColor(FOREGROUND_COLOR);
2024-01-21 09:14:47 +00:00
g2d.fillRect(1, 1, side, y - 1);
if (x > 1) {
2024-01-21 10:22:03 +00:00
if(highlight) g2d.setColor(Color.GRAY);
2024-01-21 09:14:47 +00:00
g2d.drawRect(1, y, x - 1, 1);
}
2024-01-21 10:22:03 +00:00
if(highlight) g2d.setColor(Color.GRAY);
2024-01-21 08:00:48 +00:00
g2d.fillRect(side - 4, 1, 4, 4);
g2d.fillRect(1, 1, 4, 4);
2024-01-21 08:54:23 +00:00
2024-01-21 10:22:03 +00:00
if(highlight) g2d.setColor(Color.GRAY);
2024-01-21 09:14:47 +00:00
g2d.drawLine(1, 1, x, y);
// g2d.drawLine(1+1, 1+1, x+1, y+1);
g2d.drawLine(1, 1 + 1, x, y + 1);
g2d.drawLine(1, 1 + 1, x, y + 1);
2024-01-21 10:22:03 +00:00
if(highlight) {
g2d.setColor(Color.BLUE);
g2d.drawLine(x - 10, y - 10, x + 10, y + 10);
g2d.drawLine(x + 10, y - 10, x - 10, y + 10);
}
2024-01-21 09:14:47 +00:00
g2d.setColor(FOREGROUND_COLOR);
2024-01-20 17:52:25 +00:00
}
}
}