tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
232
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Shidan Shidan ist offline Mitglied
    Registriert seit
    Jun 2011
    Beiträge
    17
    Hallöchen,

    Kurz und knapp, ich habe ein JTable das ich auch schön durch die AutoSortierMethode sortieren kann.

    Die Daten des Tables werden aus einer CSV gelesen und auch wieder hineingeschrieben, das Problme ist nur das die SortierMethode zwar das Optische JTable sortiert aber leider nicht die Reihen Nummern anpasst und so müsste man nach jedem start die Tabelle wieder sortieren da ich sie nach den Nummern ja auch wieder auslese.

    Ist es möglich das irgendetwas zu machen das die Daten richtig gespeichert werden und somit die Sortierung behalten bleibt.

    Kleine Frage noch als Bonus , ist es möglich Leere Reihe IMMER an das Ende der Table drannzuhängen auch nach der Sortierung.
     

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    welche Reihennummern meinst du? Woher kommen diese?

    Gruß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    Shidan Shidan ist offline Mitglied
    Registriert seit
    Jun 2011
    Beiträge
    17
    Ich denke die Standart nummern wenn man z.B
    Code java:
    1
    
     table.getValueAt(2,3);
    Aufruft.
    Ich lass mir das JTable bei meiner Speichermethode in ein Vector<Vector> umwandeln da mir das DefaultTableModel diese Methode direkt bereitlegt, von dem hole ich mir dann wie als würde ich aus dem JTable die Werte holen nur mit den Methoden des Vectors die Werte.

    Das Problem ist einfach das wohl die Sortierung nur oberflächlich erscheint und die Reihe 3 trozdem Reihe 3 bleibt obwohl sie an der Stelle von Reihe 7 ist.


    Ich kann auchmal hier mein Table sowie meine Methode zum Speichern posten, diese sind aber schon etwas spezifischer und haben einen minimal größeren Umfang.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    
        private void tableSetData() {       
            String[] columnNames    = new String[week.length];                  
                columnNames[0]          = "Name";
                columnNames[1]          = "Projekt";
                for(int i = 2; i < columnNames.length; i++){
                    columnNames[i] = week[i-2];
                }
            //int nTablelength      = table.length;
            String[][] data         = new String[0][columnNames.length];        
            c_initData = InitData.fl;
            
     
     
            
            setDtm(new DefaultTableModel(data, columnNames){            
                 /**Eigenes DefaultTableModel um nur Zahlen auf der Tabelle 
                  * nach Zeile 2 zu zulassen.
                 */
                private static final long serialVersionUID = 1L;
     
     
                @Override
                    public void setValueAt(Object aValue, int row, int col)
                    {
                        // Abbruch wenn der Wert kein Integer ist.  
                        if (aValue instanceof Integer)
                        {
                            //Abbruch wenn der Wert nicht zwischen 0 - 100 liegt.
                          int value = ((Integer)aValue).intValue();     
                              if(value < 0 || value > 100){
                                  return;                         
                          }
                        }
                        // Setze den Wert.
                        super.setValueAt(aValue, row, col);
                    }
     
                 
                    @Override
                    public Class<?> getColumnClass(int col)
                    {
                        if (col >=2)
                            return Integer.class;
                        else{
                            return String.class;
                        }
                    }           
            });     
            Vector<Vector<String>> filler = c_initData.get2DTable();        
            Vector<String> formatedVector = new Vector<String>();
            for(int i = 1; i < filler.size(); i++){
                
                formatedVector = filler.get(i);
                
                
                int z = filler.get(i).size()-1;         
                int gewollteKalenderwoche = c_initData.getWeekNow() + c_initData.getAnzahlWeeks();
            //  System.out.println(gewollteKalenderwoche);
                while(z >=  gewollteKalenderwoche-1){
                    formatedVector.remove(z);
                    z--;                
                }
                
                int k = c_initData.getWeekNow();
            //  System.out.println(k);
                while(k >= 2){
                    try{            
                        formatedVector.remove(k);
                    }catch(ArrayIndexOutOfBoundsException ex){
                        
                    }
                    k--;
                }
     
            
            //  System.out.println("Something: "+formatedVector);
                dtm.addRow(formatedVector);
            }       
            jTable = new GroupingTable(dtm, 0);
            jTable.setLayout(null);
            
            //c_TableM.save();
     
            
            
            jTable.setRowHeight(jTable.getRowHeight());
            jTable.setAutoCreateRowSorter(true);
            jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            for (int i = 0; i < dtm.getRowCount(); i++) {
                jTable.getRowSorter().convertRowIndexToModel(i);
            }       
            //ComboBoxen werden auf das JTable gelegt.
            TableColumn tColumnNames = jTable.getColumnModel().getColumn(0);
            comboBox_names = new JComboBox();
            TableColumn tColumnProjekts = jTable.getColumnModel().getColumn(1);
            comboBox_projekts = new JComboBox();
            
            jTable.addMouseListener(this);
     
            //ComboxBox f�r Namen und Projekte werden mit den Namen und Projekten gef�llt.
            comboBox_names.addItem("");
            comboBox_projekts.addItem("");
            for(int i = 0; i < namen.length; i++){
                comboBox_names.addItem(namen[i]);
            }
     
            for(int i = 0; i < projekt.length; i++){
                comboBox_projekts.addItem(projekt[i]);
            }
            
            //CellEditor f�r die ComboBoxen.
            tColumnNames.setCellEditor(new DefaultCellEditor(comboBox_names));
            tColumnProjekts.setCellEditor(new DefaultCellEditor(comboBox_projekts));
     
            // Neuer ColoredTableCellRenderer f�r die Einf�rbung der Tabellen.
        //  DefaultTableCellRenderer renderer = 
        //      new CustomTableCellRenderer ();
            
        //  tColumnNames.setCellRenderer(renderer);
        //  tColumnProjekts.setCellRenderer(renderer);  
        //  jTable.setDefaultRenderer(this.getClass(), new CustomTableCellRenderer());
     
            //ModelListener f�r die Tabelle um %te an Zahlen zu erg�nzen
            getDtm().addTableModelListener(this);
     
            //c_TableM.getNotFull();
     
        jTable.setFillsViewportHeight(true);                    
                            jTable.getTableHeader().setOpaque(true);
                            jTable.getTableHeader().setResizingAllowed(true);
     
                            for (int i = 0; i < jTable.getColumnCount(); i++) {
                                TableColumn col = jTable.getColumnModel().getColumn(i);                                 
                                col.setPreferredWidth(70);                      
                            }       
                            
                            Dimension size2 = jTable.getPreferredScrollableViewportSize();
                            jTable.setPreferredScrollableViewportSize
                            (new Dimension(getSize().width, size2.height));                     
     
                            jTable.getTableHeader().setBounds(0, 0, jTable.getPreferredSize().width, 0);        
                            jTable.getTableHeader().setReorderingAllowed(false);    
                            jScrollPane.setViewportView(jTable);    
        }

    Die Initalisierung der Table

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    
      class GroupingTable extends JTable {
            /**
             * 
             */
            private static final long serialVersionUID = 1L;
            private int keyColumn;
            private Color[] colorModel;
            private int[] colorIndex;   //"Model" zur Speichern der Zeilenfarbe
            
            public GroupingTable(TableModel model, int column) {
                super(model);
                this.keyColumn = column;
                colorModel = new Color[] {this.getBackground(), Color.LIGHT_GRAY};
                determineColor();
            }
            
            //tableChanged überschrieben, damit das "Farbenmodel" aktualisiert wird
            public void tableChanged(TableModelEvent evt) {
                if (evt.getColumn()==keyColumn)
                    determineColor();
                super.tableChanged(evt);
            }
            
            //Methode zum Ermitteln der Zeilenfarbe
            private void determineColor() {
                colorIndex = new int[this.getRowCount()];
                if (colorIndex.length<=0)
                    return;
                int colorCount=0;
                colorIndex[0] = colorCount;
                for (int row=1; row<this.getRowCount(); row++) {
                    
                    if(this.getValueAt(row, this.convertColumnIndexToView(keyColumn)) != null && this.getValueAt(row, this.convertColumnIndexToView(keyColumn))
                            .equals(this.getValueAt(row-1, this.convertColumnIndexToView(keyColumn))))
                        colorIndex[row] = colorCount & 1;
                    else
                        colorIndex[row] = ++colorCount & 1;
                }
            }
            
            //überschrieben, um die Zeilenfarbe zu setzen.
            public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                Component c = (Component) super.prepareRenderer(renderer, row, column);
                for (int i=0; i<this.getSelectedRows().length; i++) {
                    if (this.getSelectedRows()[i]==row)
                        return c;
                }
                try{
                    c.setBackground(colorModel[colorIndex[row]]);
                }catch(ArrayIndexOutOfBoundsException ex){
                    
                }
                return c;
            }
        }

    Eine bearbeitete Tableklasse zum einfärben der Tabellen.
    Geändert von Shidan (14.07.11 um 12:26 Uhr)
     

Ähnliche Themen

  1. Initiale Sortierung einer JTable
    Von ergin im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 02.02.11, 22:12
  2. SWT: Sortierung im Table beibehalten
    Von Wookie im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 10.08.10, 16:57
  3. Sortierung einer JTable
    Von Saban im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 10.03.09, 19:31
  4. jTable bzw. Sortierung
    Von polenben im Forum Java
    Antworten: 13
    Letzter Beitrag: 29.01.08, 13:17
  5. JTable - TableModel aus Resultset - Sortierung?
    Von silver112 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 04.10.07, 16:11

Stichworte