JButton с изображением внутри JTable. Как сделать это анимированным? - PullRequest
1 голос
/ 24 сентября 2011

Здесь я столкнулся с небольшой проблемой.

Моя цель - добавить GIF image в кнопку и отправить эту кнопку в JTable .

Прежде всего, я сделал jtable с настроенным кодом.

private javax.swing.JTable Tbl_Monkey = new javax.swing.JTable();

Tbl_Monkey.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {
        {null, null, null, null, null, null, null, null, null, null, null, null, null}
    },
    new String [] {
        "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"
    }
) {
    boolean[] canEdit = new boolean [] {
        true, false, false, false, false, false, false, false, false, false, false, false, false
    };

    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return canEdit [columnIndex];
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        return JButton.class;
    }
});


Tbl_Monkey.setDefaultRenderer(JButton.class, new JButtonTableRenderer());

А также я сделал его настроенный рендерер JTable .

public class JButtonTableRenderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
            boolean hasFocus, int row, int column) {

        return (JButton) value;


    }
}

После этого я устанавливаю значок (GIF) JButton, затем передаю его прямо в JTable, используя DefaultTableModel , ион идеально вписывается в JTable , но анимированный GIF не анимирует .

  DefaultTableModel  oDtb = (DefaultTableModel) Tbl_Monkey.getModel();
   oDtb.addRow(oTheObjectArrayofJButton);

Я понял, что если я просто сделаю JButton вне JTable,Иконка (GIF) оживила бы.Но если я помещу JButton в JTable, это не оживляет.Если только я не нажму эту кнопку ... тогда анимация наступит, но это только 1 кадр.Я должен повторно щелкнуть, чтобы получить анимацию этого GIF на нажатой кнопке.Это не хорошо ....

Как решить это?

1 Ответ

2 голосов
/ 24 сентября 2011

Я считаю, что причина вашей проблемы в том, что JTable использует JButton для визуализации ячейки, если только вы не редактируете данную ячейку, которая затем заставляет JTable использовать JButton в качестве редактора ячеек.

Когда JTable использует JButton в качестве средства визуализации ячеек, он, вероятно, просто говорит JButton рисовать себя в данной ячейке, и все.Я не совсем уверен, какой подход SWING использует для рисования анимированного GIF на JButtons, но я думаю, что есть поток, выполняющий некоторую фоновую работу.Однако в случае с JTable мы не имеем дело с реальной кнопкой, и поэтому она не перерисовывается.

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

...