Keine Anzeige von Strings in JTable

tobiaft

Mitglied
Hallo!

In meinem JTable inkl. TableModel werden alle Class-Typen wunderbar angezeigt, nur String-Daten leider überhaupt nicht :confused:
In getColumnClass habe ich schon mit
Code:
return getValueAt(0, c).getClass();
oder
Code:
switch(c){
        	case 6: return Boolean.class;
        	default: return String.class; 
	    }
herumprobiert, leider ohne Erfolg. Wo ist der Fehler?

Meine TableModel-Klasse:

Code:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import javax.swing.table.AbstractTableModel;

import ejb.ClientView;
import ejb.OrderVO;
import ejb.exceptions.AccessDeniedException;

/**
 * TableModel for the table with order data
 */
class OrderTableModel extends AbstractTableModel {     

    private ClientView clientview = null;    
    private Object[][] objects;
    private OrderVO[] orderVOs;
    
    public OrderTableModel(ClientView cv){
        this.clientview = cv;
        getData();
    }       
   
   private String[] columnNames = {"","ID", "Status", "Market", "Asset", "Time", "Buy/Sell",
"Price", "Qty", "", ""};

	private Class columnClasses[] = {String.class,String.class,String.class,
	                         String.class,String.class,String.class,
	                         Boolean.class,String.class,String.class,
	                         String.class,String.class}; 
	
	public void getData() {
	    
	    Collection coll = null;
	    Collection sorted = new ArrayList();
        Iterator it = null;
	   
        try {
            coll = clientview.getOrders();
        } catch (AccessDeniedException e) {            
            e.printStackTrace();
        } catch (Exception e) {            
            e.printStackTrace();
        }        
        
        it = coll.iterator();
        OrderVO smallest_orderVO = null;
        
	    while(it.hasNext()) {
	        smallest_orderVO = getEarliestOrderVO(coll);
	        System.out.println(smallest_orderVO.getTimestamp());
	        sorted.add(smallest_orderVO);
		    coll.remove(smallest_orderVO);
		    it = coll.iterator();
		}
	    
	   orderVOs = (OrderVO[]) sorted.toArray(new OrderVO[0]);        
	}
	
	public OrderVO getEarliestOrderVO(Collection coll){
	    
	    Iterator it = coll.iterator();
	     
	    long smallest_timestamp = (System.currentTimeMillis());
	    
	    OrderVO smallest_orderVO = null;
	        
		    while(it.hasNext()) {
		        OrderVO tempVO = (OrderVO)it.next();
		        long temp_timestamp = tempVO.getTimestamp().longValue();
		        if (smallest_timestamp>temp_timestamp){
		            smallest_timestamp = temp_timestamp;
		            smallest_orderVO = tempVO;
		        }
		    }
		    return smallest_orderVO; 
	}

	public int getColumnCount() {
		
        return columnNames.length;
    }
	
	public int getRowCount() {
		
        return orderVOs.length;        
    }
	
	public String getColumnName(int col) {
		
        return columnNames[col];
    } 
	
	public Object getValueAt(int row, int col) {
		
	    switch(col){
	    	case 0: return new String("•");
	    	case 1: return orderVOs[row].getId().toString();
	    	case 2: return orderVOs[row].getStatus().toString(); 
	    	case 3: return orderVOs[row].getMarketVO().getName();
	    	case 4: return orderVOs[row].getAssetTraderVO().getAssetVO().getName();
	    	case 5: return new String("Zeit"); //TODO umwandeln von long in Zeit
	    	case 6: return orderVOs[row].getBuySell();
	    	case 7: return orderVOs[row].getPrice().toString();
	    	case 8: return orderVOs[row].getQuantity().toString();
	    	case 9: return new String("Edit-Button");
	    	case 10: return new String("Delete-Button");
	    	default: return new String("");
	    }     
    }
	
	
	public Class getColumnClass(int c) {
	    
	    //return columnClasses[ c];
		
	    //return getValueAt(0, c).getClass();
	    switch(c){
        	case 6: return Boolean.class;
        	default: return String.class; 
	    }
	} 
}

Mein CellRenderer:
Code:
import java.awt.Component;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumnModel;

class OrderCellRenderer extends JLabel implements TableCellRenderer{
	   
		public Component getTableCellRendererComponent(JTable table, Object value,
				boolean isSelected, boolean hasFocus, int row, int column) {   	
	   		
	   		setOpaque(true);  //set background of cells opaque
	   		/**
	   		 * set width and alignment of columns
	   		 */
	   		TableColumnModel columnModel = table.getColumnModel();
	   		columnModel.getColumn(0).setPreferredWidth(10);
	   		columnModel.getColumn(1).setPreferredWidth(20);			
		    columnModel.getColumn(2).setPreferredWidth(40);
		    columnModel.getColumn(3).setPreferredWidth(50);
		    columnModel.getColumn(4).setPreferredWidth(50); 
		    columnModel.getColumn(5).setPreferredWidth(40);
		    columnModel.getColumn(6).setPreferredWidth(50);
		    columnModel.getColumn(7).setPreferredWidth(50);
		    columnModel.getColumn(8).setPreferredWidth(30); 
		    columnModel.getColumn(9).setPreferredWidth(50);
		    columnModel.getColumn(10).setPreferredWidth(50); 		
	     	      	      
            return this;
		}
}
 
Moin,
Du solltest in dem Renderer nicht (nur) das TableColumnModel manipulieren, sondern auch den anzuzeigenden Text dem JLabel zuweisen, z.B.
this.setText(value.toString());
return this;
 
Zurück