2015-04-24 2 views
4

Here is the processing.gif Вот processing.gifПочему анимированный значок .gif не отображается в столбце JTable?

Here is initial.png Здесь initial.png

Here is the output Вот выход

Вот код. processing.gif работает в других местах, например, на вкладке JTabbedPane. Здесь, в столбце JTable, он не отображается. Любые объяснения и решения? processing.gif - это движущийся значок, указывающий, что что-то загружается.

import javax.swing.*; 
import javax.swing.table.*; 

public class TableIcon extends JFrame 
{ 
    public TableIcon() 
    { 
     ImageIcon initial = new ImageIcon(getClass().getResource("initial.png")); 
     ImageIcon processing = new ImageIcon(getClass().getResource("processing.gif")); 


     String[] columnNames = {"Picture", "Description"}; 
     Object[][] data = 
     { 
      {initial, "initial"}, 
      {processing, "processing"} 
     }; 

     DefaultTableModel model = new DefaultTableModel(data, columnNames); 
     JTable table = new JTable(model) 
     { 
      public Class getColumnClass(int column) 
      { 
       return getValueAt(0, column).getClass(); 
      } 
     }; 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 

     JScrollPane scrollPane = new JScrollPane(table); 
     getContentPane().add(scrollPane); 
    } 

    public static void main(String[] args) 
    { 
     TableIcon frame = new TableIcon(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

} 
+0

конечно, как я уже говорил, что она работает в JTabbedPane –

+0

intial.png отображается и находится в том же месте, что и обработка.gif. это не проблема здесь. Я сбив с толку, почему движущийся .gif не может быть показан внутри JTable здесь –

+0

прикрепленные изображения выше –

ответ

4

Анимированные gif не работают по умолчанию в JTable. Но есть простой способ исправить это, используйте AnimatedIcon класс, который может быть найден here

В основном, это переопределяет Icon интерфейса, регистр, где рендеринг значка, и когда новый кадр GIF должен быть окрашен, он автоматически перекрасит правильную область.

Есть еще одна альтернатива, предоставляемая here, где вы регистрируете определенный ImageObserver для каждой ячейки, который должен отображать анимированный gif, но я считаю это немного более утомительным.

+0

работал как магия! Спасибо чувак! –

0

Было бы здорово, если бы анимированные GIF-файлы полностью поддерживались в JTable, но, к сожалению, это не похоже на него. Вы уже упоминали, что он работает на вкладке JTabbedPane. Я добавил следующую строку в конце TableIcon конструктора:

getContentPane().add(new JLabel(processing), BorderLayout.SOUTH); 

Это слегка изменило ситуацию: таблица показывает один кадр GIF вместо ничего. Анимированный GIF работает на этикетке. Я также заметил, что при изменении размера окна анимация в таблице выполняется. Это дало мне идею для этого грязного хака, который, кажется, работает в моей системе (также добавляется в конце TableIcon конструктора):

final Timer animationTimer = new Timer(100, e -> table.repaint()); 
animationTimer.start(); 
Смежные вопросы