Шлейфы. swing jlayerpane - Java
Формулировка задачи:
Появляются шлейфы, если увести часть окна в бок(спрятать) и потом вывести на дисплей.
main class
ui progress bar
file для загрузки
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
public class ProgressBarPanel extends JLayeredPane {
public static final Dimension SIZE = new Dimension(810, 24);
private JProgressBar bar;
public ProgressBarPanel(JProgressBar bar) {
this.bar = bar;
JPanel upperPanel = new JPanel(new BorderLayout(0, 0));
upperPanel.setPreferredSize(SIZE);
this.setPreferredSize(SIZE);
this.add(bar, 1);
this.add(upperPanel, 0);
bar.setBounds(0, 0, 810, 24);
}
public static void main(String[] args) throws IOException {
JProgressBar bar = new JProgressBar();
JFrame f = new JFrame("f");
bar.setUI(new FancyProgressBar(ImageIO.read(ProgressBarPanel.class.getResource("login-progress-bar.png"))));
ProgressBarPanel barPanel = new ProgressBarPanel(bar);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
barPanel.setPreferredSize(new Dimension(810, 24));
f.add(barPanel);
f.pack();
f.setVisible(true);
}
}
}import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.plaf.basic.BasicProgressBarUI;
public class FancyProgressBar extends BasicProgressBarUI {
public final Color border = new Color(156, 155, 155);
public final Color bottomBorderLine = new Color(146, 154, 140);
public final Color REST_COLOR = new Color(200, 203, 199);
public static final int PROGRESS_WIDTH = 810;
public static final int PROGRESS_HEIGHT = 24;
BufferedImage image;
public FancyProgressBar(BufferedImage bufferedImage) {
image = bufferedImage;
}
// @Override
// protected Dimension getPreferredInnerHorizontal() {
// return new Dimension(PROGRESS_WIDTH-1, PROGRESS_HEIGHT-1);
// }
@Override
protected void paintDeterminate(Graphics g, JComponent c) {
Graphics2D g2d = (Graphics2D) g.create();
Rectangle rec = g2d.getClipBounds();
double complete = progressBar.getPercentComplete();
//hard set
complete = 0.7;
int width = progressBar.getWidth();
int height = progressBar.getHeight();
int completeWidth = (int) (complete * width);
// fill
g2d.setColor(REST_COLOR);
g2d.fillRect(rec.x + completeWidth, rec.y, width, height);
// inner border
g2d.setColor(border);
g2d.drawLine(completeWidth, 1, rec.width, 1);
g2d.drawLine(completeWidth, rec.height - 2, rec.width, rec.height - 2);
g2d.drawLine(rec.x + rec.width - 2, rec.y, rec.x + rec.width - 2, rec.y + rec.height);
g2d.setColor(bottomBorderLine);
g2d.drawLine(completeWidth, rec.height - 3, rec.width, rec.height - 3);
// picture
if (completeWidth > 0)
g2d.drawImage(image.getSubimage(0, 0, completeWidth+1, PROGRESS_HEIGHT), rec.x, rec.y, completeWidth,
rec.height+1, null);
// g2d.setColor(new Color(200, 200, 200));
// g2d.fillRect(rec.x, rec.y, rec.width,rec.height);
}
}Решение задачи: «Шлейфы. swing jlayerpane»
textual
Листинг программы
Rectangle rec = g2d.getClipBounds();