Mal wieder die JTable

Der Renderer schreibt ja auch keine neuen Daten. Er sagt nur wie sie dargestellt werden. Angenommen du setzt den Text im Renderer immer auf Müll, dann steht nachher in der Table überall Müll drin, obwohl im Model immer noch die richtigen Daten drin stehen.

Zeig mir mal bitte wo du den Renderer der Tabelle hinzufügst und wie der Renderer aussieht. Danke.

MFG

zEriX
 
Also wie gesagt hab ich den Renderern nur für den Header verwendet, er ist denkbar simpel

Code:
package GUI;

import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.JComponent;
import javax.swing.JTable;

public class MyRenderer extends DefaultTableCellRenderer{
    
    /** Creates a new instance of MyRenderer */
    public MyRenderer() {
    }
    public JComponent getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) 
    {
        return (JComponent)value;
    }
}

Verwendung findet er nur in fogender Methode

Code:
    public void setTableHeader()
    {   
        Border headerBorder = UIManager.getBorder("TableHeader.cellBorder");
        String[] headerStrings = {"1","2","3"};
        int[] headerWidths = {100,100,100};
        this.table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        ArrayList<JLabel> headerLabels = new ArrayList<JLabel>();
        DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
        MyRenderer renderer = new MyRenderer();        
        
        for(int i=0;i<headerStrings.length;i++) 
        {
            headerLabels.add(new JLabel(headerStrings[i], JLabel.CENTER));
            headerLabels.get(i).setBorder(headerBorder);
            TableColumn column = new TableColumn();
            column.setHeaderValue(headerLabels.get(i));
            column.setPreferredWidth(headerWidths[i]);
            column.setMinWidth(headerWidths[i]);
            column.setHeaderRenderer(renderer);
            columnModel.addColumn(column);
        }
        
        MyTableModel myTm = (MyTableModel)this.table.getModel();
        myTm.setColumnNames(headerStrings);
        this.table.setColumnModel(columnModel);
}
 
So, jetzt hab ichs endlich hinbekommen.

Ich hab jetzt wieder das DefaultTableModel benutzt und die Methode setDataVector(Object[][] dataVector, Object[] columnIdentifiers) !

Jetzt funktioniert das setzten der Daten un der Header bleibt auch erhalten.
Ich bin mir nicht sicher, ob das so 100% sauber implementiert ist, für den Moment erfüllt es aber seinen Zweck.

Nochmals vielen Dank für die Hinweise, Tipps und Codebeispiele!
 

Neue Beiträge

Zurück