Шлейфы. 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();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д