2015-04-24 4 views
1

Im делая приложение, которое должно быть в состоянии читать файлы в данном каталоге, а затем отображать все файлы изображений в полноэкранном окне без полей, оно также должно отображать текстовые файлы, но я начал с этого еще что-нибудь, так что не обращайте внимания на часть system.out. Пока ive сделал полноэкранный и без полей JFrame, а ive создал Arraylist, содержащий файлы, которые я хочу показать. Затем я добавляю jpanel с файлом в конструкторе, этот jpanel добавляет изображение в jlabel и отображает его, после чего я удаляю jpanel и начинаю с следующего изображения.JLabel изображение исчезает до цвета

Что мне нужно - это способ заставить изображения затухать от заданного цвета, а затем исчезать до того же цвета.

это где я добавить панели и удалить их снова

for (File f : files) { 
     String fileName = f.getName(); 
     if (fileName.endsWith(".txt")) { 
      System.out.println("Txt"); 
      System.out.println(fileName); 
      System.out.println("--"); 
     } else if (fileName.endsWith(".png") || fileName.endsWith(".jpg") || fileName.endsWith("bmp")) { 
      AlbumPanel albumpan = new AlbumPanel(connect, f, this); 
      add(albumpan, BorderLayout.CENTER); 
      pack(); 
      try { 
       Thread.sleep(current.getFormat().getPicLength()*1000); 

      } catch (InterruptedException ex) { 
      } 
      remove(albumpan); 
     } 
    } 

И это JPanel

public class AlbumPanel extends JPanel { 

BufferedImage image; 
ImageIcon icon; 
IConnect connect; 
File pic; 
JFrame presWin; 

public AlbumPanel(IConnect connect, File pic, JFrame presWin) { 
    this.connect = connect; 
    this.pic = pic; 
    this.presWin = presWin; 
    this.setLayout(new GridBagLayout()); 

    try { 
     image = ImageIO.read(pic); 
    } catch (Exception e) { 
     System.out.println(e); 
    } 

    image = resize(image, presWin.getWidth(), presWin.getHeight()); 
    icon = new ImageIcon(image); 
    JLabel picLabel = new JLabel(); 
    picLabel.setIcon(icon); 
    add(picLabel); 
    setVisible(true); 
} 

private BufferedImage resize(BufferedImage image, int width, int height) { 
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT); 
    Graphics2D g2d = (Graphics2D) bi.createGraphics(); 
    g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); 
    g2d.drawImage(image, 0, 0, width, height, null); 
    g2d.dispose(); 
    return bi; 
} 

ответ

1

Override метод рендеринга (возможно paintComponent) на контроле, который вы используете. Вызовите super.paintComponent, а затем нарисуйте полупрозрачный прямоугольник вашего цвета «затухания» над ним.

Внутри paintComponent вы прошли мимо объекта Graphics. Методы этого объекта могут использоваться для выполнения действий, включая рисование прямоугольника на экране. Вероятно, вы хотите fillRect.

Выберите непрозрачность, чтобы она была 0, когда изображение полностью отображено, затем переместитесь в 1, когда оно полностью исчезло.

Вам понадобится что-то, чтобы вызвать перерисовки через регулярные промежутки времени (Swing Timer может быть достаточно хорошим).

+0

как создать полупрозрачный прямоугольник? только новый JLabel или что-то? Я гавань действительно работал с графикой в ​​Java –

+0

@JonasOlesen добавил что-то на что. –

+0

Override paintComponent не красят, но да, это идея –

1

Вы можете использовать прозрачность управления цветом (конструктор public Color(int r, int g, int b, int a), где последние переменный является альфа.

Запуска таймера и изменить прозрачность Цвет от 0 до 255 и засыпки изображения (или панели) с цветом.

Смежные вопросы