Изображения пустые в JTable - PullRequest
0 голосов
/ 30 июня 2011

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

Я переопределяю getColumnClass.Вот объявление таблицы ...

   laneTable.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null}
        },
        new String [] {
            "Lane ID", "Status", "Traffic", "Gate Arm", "Lane Indicator", "Temperature"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
        };

        @Override
        public Class getColumnClass(int column)
        {

            if (column == 4)
            {

                return ImageIcon.class;
            }
            return Object.class;
            // other code; default to Object.class
        }


    });

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

for(int i = 0; i < 200; i++){
  ImageIcon icon = new ImageIcon("Images/test.jpg");
  laneTable.getModel().setValueAt(icon,i,4);
}

Путь к моим изображениям - /src/Images/test.jpg, если мой путь каким-то образом неверен ... Я имел дело с этим на прошлой неделеи я не могу понять, почему эти изображения продолжают показываться пустыми в моей таблице.

Идеи?

edit вот что я предполагаю - SSCCE.Не знаю, сработает ли это или нет ..

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

import java.awt.event.*;
import java.awt.*;

public class LaneGUI extends javax.swing.JApplet implements Runnable {
    private Connection connection;
private XMLParser xmlParser;
private laneData laneData;
private SiteData siteData;
private Thread connectionThread;


public void init() {        


    try {
        java.awt.EventQueue.invokeAndWait(new Runnable() {

            public void run() {                    
                initComponents();                  
              ImageIcon icon = new ImageIcon("Images/test.jpg");

               for(int i = 0; i < 200; i++){
          laneTable.getModel().setValueAt(icon,i,4);
            }

        });
    } catch (Exception ex) {
        ex.printStackTrace();
    }


}   


/** This method is called from within the init() method to
 * initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is
 * always regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")   




// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {


    jScrollPane1 = new javax.swing.JScrollPane();
    laneTable = new javax.swing.JTable();



    laneTable.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null},
            {null, null, null, null, null, null}
        },
        new String [] {
            "Lane ID", "Status", "Traffic", "Gate Arm", "Lane Indicator", "Temperature"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
        };

        @Override
        public Class getColumnClass(int column)
        {

            if (column == 4)
            {

                return ImageIcon.class;
            }
            return Object.class;
            // other code; default to Object.class
        }


    });
    laneTable.setRowHeight(100);
    jScrollPane1.setViewportView(laneTable);

    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)     
            .addContainerGap())
    );

}// </editor-fold>                        







// Variables declaration - do not modify                     

private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable laneTable;
// End of variables declaration                   
}

edit Протестировано изображение в новой метке, изображения отображаются правильно внутри метки, но все еще остаются пустыми внутри таблицы.

1 Ответ

1 голос
/ 30 июня 2011

Пустое изображение может быть не проблемой пути, а проблемой рендеринга. Посмотрите на свой CellRenderer для этого столбца. Использует ли он рендерер по умолчанию или вы делаете что-то особенное.

Попробуйте просто распечатать путь, чтобы убедиться, что он попадает в ячейку. Также попробуйте получить доступ к этому пути снаружи JTable, чтобы убедиться, что проблема пути вообще не существует.

...