Шлейфы. swing jlayerpane - Java

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

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

Появляются шлейфы, если увести часть окна в бок(спрятать) и потом вывести на дисплей. main class
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);
    }
}
 
}
ui progress bar
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);
    }
}
file для загрузки

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

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

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


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

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

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