JTable - Grösse



  • Hallo Zusammen,

    ich habe nocheinmal eine (vielleicht zweieinhalb) Frage(n).

    1. Wodurch ergibt sich die Grösse (Länge x Breite)einer JTable? Kann ich die nachträglich ändern? Oder ergibt sich diese automatisch durch die Anzahl von Columns?

    2)Wie kann ich nachträglich die Grösse einer einzelnen Column ändern? Ich hatte da zwar etwas im Forum gefunden, hat aber nicht funktioniert.

    //Hier das TableModel
    //  Tabelle definieren
        JTable  tabelle = new JTable(new AbstractTableModel()
        {
    
            int reihen = 1000, spalten = 5;
    
            public int getRowCount() 
            {
                return reihen; 
            }
    
            public int getColumnCount() 
            {
                return spalten; 
            }
    
            public String getColumnName(int col)
            {
                String result = "";
                switch(col)
                {
                    case 0: result = "Kontoklasse" ; break;
                    case 1: result = "Kontogruppe" ; break;
                    case 2: result = "Kontonummer" ; break;
                    case 3: result = "Kontoname"   ; break;
                    case 4: result = "Bezeichnung" ; break;
                    default:
                }
                return result;
            }
    
            public Object getValueAt(int reihen, int spalten) 
            {
    
                return (rowData[reihen][spalten]);
            }
    
            public Object setValueAt(int reihen, int spalten) 
            {
                return (rowData[reihen][spalten]);
            }               
    
            public boolean isCellEditable(int row, int col)
            { return true; }
    
        } );
    .....
            for (int i = 0; i < 5; i++) {
                if (i < 3) {
                    tabelle.getColumnModel().getColumn(i).setWidth(10);
    
                } else {
                    tabelle.getColumnModel().getColumn(i).setWidth(200);
    
                }
            }
    

    .....

    Danke schon mal für die Antworten!!

    Gruss

    Oliver 🙂



  • zu 1.)
    Die Breite ergibt sich aus der Summe der Breiten der einzellnen Spalten.

    zu 2.)
    Ja, das kann man ändern.
    Die Zeilenhöhe stellt man über

    tabelle.setRowHeight(hoeheDerSpalte);
    

    ein.
    Wie das mit der Breite geht findest du unter JTable nochmal

    [ Dieser Beitrag wurde am 02.07.2003 um 22:40 Uhr von destruct0r editiert. ]



  • Danke für die Antwort, aber genau diesen Link mit dieser Info meinte ich, als ich anmerkte, dass das bei mir nicht funktioniert hat.

    Gibt's denn nicht irgendwie mal ein kurzes Code-Schnipsel??

    Gruss

    Oliver 🙄



  • Dann sag mal genauer, was denn da nun nicht funktioniert hat? Wenn du setMinWidth() und auch noch setMaxWidth() mit denselben Parametern verwendest, dann wird die Breite auf jeden Fall auf diesen Wert gesetzt.



  • Hallo Destructor,

    danke, Du hattest so recht. Kaum macht man es richtig, schon funktionierts.
    Aber: Wieso hat das mit der normalen Methode "setWidth" nicht funktioniert?

    Gibt es da eine Erklärung? Und ausserdem: So wie es jetzt ist, ist doch wohl auch nichts mehr mit Resizing, oder?

    Gruss

    Oliver

    [ Dieser Beitrag wurde am 04.07.2003 um 21:43 Uhr von oj0169 editiert. ]



  • public void setWidth(int width)

    This method should not be used to set the widths of columns in the JTable, use setPreferredWidth instead. [...]

    Das jedenfalls sagt die APIDoc...
    Wenn du setPreferredSize() verwendest, dann sollte die Spalte dann auch so breit sein, wie du es angegeben hast und das Resizen sollte auch noch funken. (du kannst dann mit setMinWidth() und setMaxWidth() natürlich Limits für das Resizen festlegen.



  • Hallo mal wieder,

    noch ein Gedicht ...

    Was jetzt noch mehr als merkwürdig dünkt, ist die Tatsache, dass die Table in einer gewissen Breite gehalten wird, dafür aber in den Spalten Punkte zur Kennzeichnung fehlender Breite angezeigt werden. Den Dialog habe ich mit 800x600 definiert und eine Scroll-Pane hineigesetzt, die die Table aufnimmt. Jetzt scheint es so zu sein, dass hier irgendwie intern eine Maximalbreite vorliegt. Container falsch definiert????

    Wäre schön, wenn da Jemand eine Idee hätte 😉

    Ein schönes Wochenende noch,

    Oliver


Anmelden zum Antworten