Шлейфы. swing jlayerpane - Java

Узнай цену своей работы

Формулировка задачи:

Появляются шлейфы, если увести часть окна в бок(спрятать) и потом вывести на дисплей. main class
Листинг программы
  1. import java.awt.BorderLayout;
  2. import java.awt.Dimension;
  3. import java.io.IOException;
  4. import javax.imageio.ImageIO;
  5. import javax.swing.JFrame;
  6. import javax.swing.JLayeredPane;
  7. import javax.swing.JPanel;
  8. import javax.swing.JProgressBar;
  9. public class ProgressBarPanel extends JLayeredPane {
  10. public static final Dimension SIZE = new Dimension(810, 24);
  11. private JProgressBar bar;
  12. public ProgressBarPanel(JProgressBar bar) {
  13. this.bar = bar;
  14. JPanel upperPanel = new JPanel(new BorderLayout(0, 0));
  15. upperPanel.setPreferredSize(SIZE);
  16. this.setPreferredSize(SIZE);
  17. this.add(bar, 1);
  18. this.add(upperPanel, 0);
  19. bar.setBounds(0, 0, 810, 24);
  20. }
  21. public static void main(String[] args) throws IOException {
  22. JProgressBar bar = new JProgressBar();
  23. JFrame f = new JFrame("f");
  24. bar.setUI(new FancyProgressBar(ImageIO.read(ProgressBarPanel.class.getResource("login-progress-bar.png"))));
  25. ProgressBarPanel barPanel = new ProgressBarPanel(bar);
  26. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  27. barPanel.setPreferredSize(new Dimension(810, 24));
  28. f.add(barPanel);
  29. f.pack();
  30. f.setVisible(true);
  31. }
  32. }
  33. }
ui progress bar
Листинг программы
  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.Rectangle;
  6. import java.awt.image.BufferedImage;
  7. import javax.swing.JComponent;
  8. import javax.swing.plaf.basic.BasicProgressBarUI;
  9. public class FancyProgressBar extends BasicProgressBarUI {
  10. public final Color border = new Color(156, 155, 155);
  11. public final Color bottomBorderLine = new Color(146, 154, 140);
  12. public final Color REST_COLOR = new Color(200, 203, 199);
  13. public static final int PROGRESS_WIDTH = 810;
  14. public static final int PROGRESS_HEIGHT = 24;
  15. BufferedImage image;
  16. public FancyProgressBar(BufferedImage bufferedImage) {
  17. image = bufferedImage;
  18. }
  19. // @Override
  20. // protected Dimension getPreferredInnerHorizontal() {
  21. // return new Dimension(PROGRESS_WIDTH-1, PROGRESS_HEIGHT-1);
  22. // }
  23. @Override
  24. protected void paintDeterminate(Graphics g, JComponent c) {
  25. Graphics2D g2d = (Graphics2D) g.create();
  26. Rectangle rec = g2d.getClipBounds();
  27. double complete = progressBar.getPercentComplete();
  28. //hard set
  29. complete = 0.7;
  30. int width = progressBar.getWidth();
  31. int height = progressBar.getHeight();
  32. int completeWidth = (int) (complete * width);
  33. // fill
  34. g2d.setColor(REST_COLOR);
  35. g2d.fillRect(rec.x + completeWidth, rec.y, width, height);
  36. // inner border
  37. g2d.setColor(border);
  38. g2d.drawLine(completeWidth, 1, rec.width, 1);
  39. g2d.drawLine(completeWidth, rec.height - 2, rec.width, rec.height - 2);
  40. g2d.drawLine(rec.x + rec.width - 2, rec.y, rec.x + rec.width - 2, rec.y + rec.height);
  41. g2d.setColor(bottomBorderLine);
  42. g2d.drawLine(completeWidth, rec.height - 3, rec.width, rec.height - 3);
  43. // picture
  44. if (completeWidth > 0)
  45. g2d.drawImage(image.getSubimage(0, 0, completeWidth+1, PROGRESS_HEIGHT), rec.x, rec.y, completeWidth,
  46. rec.height+1, null);
  47. // g2d.setColor(new Color(200, 200, 200));
  48. // g2d.fillRect(rec.x, rec.y, rec.width,rec.height);
  49. }
  50. }
file для загрузки

Решение задачи: «Шлейфы. swing jlayerpane»

textual
Листинг программы
  1. Rectangle rec = g2d.getClipBounds();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут