tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
973
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Leyja Leyja ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    24
    Hallo,

    ich hab diesbezüglich schon die Suchfunktion benutzt, hatte aber leider ein wenig meine Verständnisschwierigkeiten damit, bzw. es war nicht ganz das, was ich brauchte.

    Ich habe eine Tabelle, in der ich Spalten und Zeilen ausblenden will. Bei den Spalten habe ich es endlich geschafft, die Breite der jeweiligen SPalte einfach auf 0 zu setzen, so dass sie nicht mehr angezeigt werden.
    Gibt es so eine Möglichkeit auch für die Zeilen?
    Bisher hab ich es so gelöst, dass ich einfach die Inhalte verdoppelt habe. Bei den Inhalten, die über das Tablemodel ausgegeben werden, kann ich dann Zeilen rauslöschen und wenn ich die Zeilen wieder einfügen möchte, gucke ich in dem anderen Speicher und hole mir die benötigten Inhalte da raus und pack sie wieder in den anderen.
    Das ganze ist aber extrem umständlich, die Methode für das Einfügen ziemlich lang. :-/
    Da ich nun aber auch noch ermöglichen soll, dass Zellen geändert werden können bzw. die Datentypen der Werte geändert werden sollen, müsste ich das für beide Inhaltsspeicher machen, da sonst beim Löschen und später wieder einfügen ja aktualisierte Daten nicht mehr vorhanden sind.

    Wäre also toll, wenn es auch eine Möglichkeit gäbe, irgendwie auf verdoppelte Inhalte zu verzichten. " Bin mit meinem Latein am Ende und die Zeit wird leider auch knapp ._. Andernfalls müsste ich wohl doch beim Zellenbearbeiten meine Methoden so erweitern, dass beide Speicher geändert werden :-/

    Vielen Dank schonmal im Voraus,
    Leyja
     

  2. #2
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    Hallo,

    ich hätte es wohl so gelöst :

    In meiner Datenstruktur für die Zeilen hätte ich ein boolsches Feld angelegt das
    mir sagt ob diese Zeile anzuzeigen ist oder nicht.
    Die Methode getRowCount() und getValueAt() müssen natürlich entsprechend
    ihre Rückgabewerte bilden.

    Kommt es hinsichtlich zur Sichtbarkeit der Zeilen zu Änderungen im Model muß
    nur eben dem JTree dieses per Event Mitgeteilt werden !

    Gruß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

  3. #3
    Leyja Leyja ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    24
    In meiner Datenstruktur für die Zeilen hätte ich ein boolsches Feld angelegt
    Kannst du mir ein bisschen genauer erklären, wie du das meinst?
    Bei einer Tabelle ist das leider so, dass ich praktisch pro Spalte ein Objekt ausgebe und in jeder Zeilte dann eben ein bestimmtes Attribut dargestellt wird, was für jedes dieser Objekte gilt. Ist das dann auch möglich?

    Und kannst du mir eventuell auch sagen, wie ich getRowCount und getValueAt ändern müsste?
    Sind bestimmt total doofe Frage ._. Aber ich hab jetzt seit 2,5 Wochen nix anderes gemacht als Java und hab das Gefühl, ich werd immer dümmer *g*
     

  4. #4
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    Hallo,

    weil ich zur Zeit selber kein Projekt am Start hab und mir gern die Zeit
    hier vertreibe und mit deiner Rückfrage gerechnet habe, habe ich mal etwas
    zusammengetippt !

    Ein Beispiel TableModel welches meine Idee umsetzt :
    Code :
    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
    
    import javax.swing.table.AbstractTableModel;
     
    public class MyTableModel extends AbstractTableModel {
     
        MyRowModel root = null;
        
        /* innere Klasse zur Datenkapselung 
         * implementiert eine einfachverkettete Liste
         */
        
        class MyRowModel {
     
            // Sichtbare Felder
            private Integer integer = null;
            private String string = null;
            private Float floatval = null;
            
            // Nicht sichtbare Felder
            private MyRowModel next = null;
            private boolean visible = true;
            
            // Simpler Konstruktor
            public MyRowModel(int i,String s,float f) {
                
                this.integer = new Integer(i);
                this.string = s;
                this.floatval = new Float(f);
            }
     
            // Vorne in Liste einfügen
            public void add(MyRowModel row) {
                this.next = row;
            }
            
            // Hinten an Liste anhängen
            public void append(MyRowModel row) {
                
                if ( next==null ) {
                    this.next = row;
                } else {
                    this.next.append(row);
                }
            }
            
            // Durchzählen 
            public int count() {
                
                if (this.next==null) {
                    return (visible?1:0);
                } else {
                    return (this.next.count()+(visible?1:0));
                }
            }
            
            // Sichtbarkeit setzen (String abhängig)
            public void setVisibleFor(String s,boolean v) {
     
                if (this.string.equals(s)) visible = v;
                
                if (this.next!=null) {
                    this.next.setVisibleFor(s,v);
                }
            }
     
            // Wert für Zelle ausgeben
            public Object getValue(int rowIndex, int columnIndex) {
     
                if (visible && rowIndex==0) {
                    
                    switch (columnIndex) {
                    
                        case 0 : return integer;
                        case 1 : return string;
                        case 2 : return floatval;
                    }
     
                    return null;
                    
                } else {
                    return next.getValue(rowIndex-(visible?1:0),columnIndex);
                }
            }
        } // - innere Klasse ENDE
        
        // Feste Spalten Zahl 3
        public int getColumnCount() {
        
            return 3;
        }
     
        // Dynamische Zeilenzahl
        public int getRowCount() {
            
            if (root==null) {
                return 0;
            } else {
                return root.count();
            }
        }
     
        // Zellenwert augeben 
        public Object getValueAt(int rowIndex, int columnIndex) {
            
            if(root!=null) {
                return root.getValue(rowIndex,columnIndex);
            } else {
                return null;
            }
            
        }
     
        // Zeile vorne hinzufügen 
        public void add(int i,String s,float f) {
     
            MyRowModel row = new MyRowModel(i,s,f);
            row.add(root);
            root=row;
            this.fireTableDataChanged();
        }
        
        // Zeile hinten anhängen
        public void append(int i,String s,float f) {
     
            MyRowModel row = new MyRowModel(i,s,f);
            if (root==null) {
                root=row;
            } else {
                root.append(row);
            }
            this.fireTableDataChanged();
        }
     
        // Sichtbarkeit für Zeile setzen 
        public void setVisibleFor(String s,boolean v) {
            
            if (root!=null) { root.setVisibleFor(s,v); }
            this.fireTableDataChanged();
        }
    }

    Ab welcher Zeilenzahl die Sache mit der einfachverketteten Liste so eher "suboptimal"
    ist lasse ich mal dahingestellt !
    Ob du den Code an dein Projekt anpassen kannst, weiß ich auch nicht !

    Aber es Funktioniert soweit ! Evtl. gibts noch kleine Schönheitsfehlerchen !

    Gruß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

  5. #5
    Leyja Leyja ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    24
    Hi,

    vielen Dank für die Hilfe Ein paar Fragen hab ich aber noch.
    Ich bin zum einen etwas verwirrt, was die Felder betrifft. Versteh ich das jetzt richtig, dass ich eine Tabelle habe, die drei Spalten hat, wo in Spalte 1 Integerwerte, in Spalte 2 Strings und in Spalte 3 Float-Werte stehen?

    Und was genau passiert bei hinten/vorne in die Liste einfügen? Entferne ich die Zeile und packe sie dann anschließend entweder vorne oder hinten wieder in die Tabelle, wenn ich sie einfügen will?

    Wenn ja, ist das leider nicht so ganz das, was ich brauche. Normalerweise ist das ja (so wie ich das auch mit den Spalten bei dir verstanden habe) so, dass eben eine Spalte für einen Datentyp da ist und die Zeile das Objekt symbolisiert.
    Bei uns ist es leider genau andersrum, in einer Zeile stehen die Attribute, die zu den Objekten, die spaltenweise dargestellt werden, gehören.
    Die Zeilen müssten daher auch genau an die gleiche Stelle wieder, wo sie vorher waren.

    Aber vielleicht hab ich deinen Code auch völlig missverstanden?

    Und was genau meintest du damit, dass ich dann für mein TableModel die RowCount und GetValueAt-Methoden anpassen muss? Oder ist das dann nicht mehr der Fall?
     

  6. #6
    TheJadix TheJadix ist offline Mitglied Gold
    Registriert seit
    Sep 2005
    Ort
    Bremerhaven
    Beiträge
    220
    Hallo,

    Deine Annahmen zur Struktur der Tabelle sind Richtig.
    Für das Beispiel habe ich mal ein int, ein String und ein float genommen.
    Den int- und float-Wert noch in ihr Objektformat gebracht um die Konventionen
    für den Rückgabewert der getValue-Methode zu erfüllen.
    Anstatt der 3 separaten Felder hätte es auch ein Object-Array getan,
    dann hätte man die case-Struktur gegen einen direkten Aufruf über den Index ersetzen können.
    Diesen Teil des Codes, auf die von Dir benötigten Felder/Spalten zu ändern sollte kein Problem darstellen.

    Das add fügt eine neue Zeile als erstes Element ein, append hängt sie hinten an.
    Eine remove-Methode fehlt, ist aber auch nicht so schwierig die noch dazu zu tippen !

    Was nun das ein und ausblenden einer Zeile angeht dazu, gibt es in dem Beispiel die
    setVisibleFor-Methode. Ein Beispiel :

    Spalte 1 . . Spalte 2 . . Spalte 3
    . . 1 . . . . "Eins" . . . . 1.0
    . . 2 . . . . "Zwei" . . . . 2.0
    . . 3 . . . . "Drei" . . . . 3.0


    Ein setVisibleFor("Zwei",false); würde die zweite Zeile verstecken. Die Zeile bleibt aber
    im Model erhalten wird aber beim getRowCount und getValue nicht mehr berücksichtigt !
    Mit setVisibleFor("Zwei",true); wäre die Zeile wieder sichtbar !
    Gäbe es mehrere Zeilen mit dem String "Zwei" in der Spalte würden alle ein bzw.
    ausgeblendet.
    Die Bedingung für das setVisibleFor von String auf etwas anderes zu ändern sollte
    auch kein Problem sein !

    Hoffe jetzt ist der Code verständlicher

    Gruß JAdix
     
    Signatur ? ? ? So ein Humbug ! ! !

Ähnliche Themen

  1. TListView Zeilen ausblenden
    Von delphi beginner im Forum Delphi, Kylix, Pascal
    Antworten: 1
    Letzter Beitrag: 26.01.10, 12:07
  2. Tabellen Zeilen ein und ausblenden
    Von lernen.2007 im Forum Javascript & Ajax
    Antworten: 22
    Letzter Beitrag: 13.05.08, 00:18
  3. Zeilen ausblenden
    Von al-Maghribi im Forum PHP
    Antworten: 3
    Letzter Beitrag: 09.04.08, 12:03
  4. Zeilen en-bloc ein/ausblenden
    Von ManicMarble im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 28.09.07, 23:46
  5. [C++ MFC] Zeilen in CListCtrl ausblenden
    Von sisela im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 05.01.05, 13:49