tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
627
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    zitro-java zitro-java ist offline Rookie
    Registriert seit
    Nov 2010
    Beiträge
    6
    Hi,
    ich komme mit der JTable nicht weiter. Wenn es mal klappt, soll eine Tabelle entstehen. Die je nach Anforderung in der Zeilengröße sich anpasst.

    Als Beispiel habe ich bei Oracle folgende Webseite gefunden:
    http://download.oracle.com/javase/tu...nts/table.html

    Unter dem Abschnitt "Creating a Table Model" findet sich annähernd was ich brauche. Da wird die Tabelle mit einem Objekt initialisiert. Das sieht folgendermaßen aus:

    private Object[][] data = {
    {"Kathy", "Smith",
    "Snowboarding", new Integer(5), new Boolean(false)},
    {"John", "Doe",
    "Rowing", new Integer(3), new Boolean(true)},
    {"Sue", "Black",
    "Knitting", new Integer(2), new Boolean(false)},
    {"Jane", "White",
    "Speed reading", new Integer(20), new Boolean(true)},
    {"Joe", "Brown",
    "Pool", new Integer(10), new Boolean(false)}
    };

    Meine Frage ist nun, wie kann ich selber so ein Objekt erzeugen? Ich weiß im Voraus nicht wieviele Zeilen ich habe, Spalten sind nur drei. Jede Spalte hätte einen anderen Objekttyp, was aber wohl egal wäre.
    Was vielleicht noch wichtig ist, das sich die Tabelle sehr oft ändern soll. Der Typ bleibt gleich, aber die in den Zellen enthaltenen Objekte werde sich ändern.

    Wenn jemand eine Idee hätte wie man vorgehen könnte, wäre es super!
     

  2. #2
    MiMi MiMi ist offline Mitglied Smaragd
    Registriert seit
    Sep 2007
    Beiträge
    1.177
    Und wann genau hast du denn die Daten fuer deine Tabelle? Besteht nicht die Moeglichkeit die Tabelle erst zu erstellen sobald du die Daten hast?
    Ansonsten vielleicht hilft dir dies? http://www.tutorials.de/swing-java2d...ml#post1540438
    Geändert von MiMi (15.11.10 um 15:24 Uhr)
     
    Waere super wenn ihr euren Code in dieser Form einfuegt:
    [JAVA]System.out.println("Test :)");[/JAVA]
    wird zu:
    Code java:
    1
    
    System.out.println("Test :)");
    Tabs sind uebrigens keine Feinde :)
    Der "Erledigt Button" beisst net :) Und der "Danke Button" ist auch nicht nur zur zierde
    Danke :D

  3. #3
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    Hatte das Problem ebenfalls aber mit ein paar kleinen Änderungen/Erweiterungen an der JTable und deren Model kann man dieses Problem aber recht einfach lösen.

    JTable
    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
    
        public MyTable() {
            ...
            setFillsViewportHeight(true);
            ...
        }
     
        /**
         * Fügt der Tabelle eine leere Zeile hinzu
         */
        public void addEmptyRow() {
            addRow((Object[]) null);
        }
     
        /**
         * Fügt der Tabelle eine neue Zeile mit Daten hinzu
         * 
         * @param pData
         *            Inhalt
         */
        public void addRow(final Object[] pData) {
            model.addRow(pData);
        }
     
        /**
         * Fügt der Tabelle eine neue Spalte hinzu
         * 
         * @param pTitle
         *            Überschrift
         * @param pClazz
         *            Typ der Inhalte
         */
        public void addColumn(final String pTitle, final Class<?> pClazz) {
            model.addColumnClass(pClazz);
            setDefaultRenderer(pClazz, renderer);
     
            TableColumn col = new TableColumn(model.getColumnCount());
            col.setHeaderValue(pTitle);
            addColumn(col);
            model.addColumn(pTitle);
        }

    Model:
    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
    
        private List<Class<?>> columnClasses = new ArrayList<Class<?>>();
     
        /**
         * Fügt dem Model die Klasse einer neuen Spalte hinzu
         * 
         * @param pClazz
         *            Klasse des Spalteninhaltes
         */
        public void addColumnClass(final Class<?> pClazz) {
            columnClasses.add(pClazz);
        }
     
        /**
         * {@inheritDoc}
         */
        public Class<?> getColumnClass(final int pCol) {
            return columnClasses.get(pCol);
        }
     
        /**
         * Entfernt eine Klasse einer bestimmten Spalte wieder aus dem Model
         * 
         * @param pCol
         *            Spalte der gewünschten Klasse
         * @return Klasse des Spalteninhaltes
         */
        public Class<?> removeColumnClass(final int pCol) {
            return columnClasses.remove(pCol);
        }

    Das sollten alle wichtigen Funktionen sein. Bei Fragen helfe ich gerne weiter
    Geändert von Tsunamii (16.11.10 um 16:04 Uhr)
     

  4. #4
    zitro-java zitro-java ist offline Rookie
    Registriert seit
    Nov 2010
    Beiträge
    6
    Hey Mimi,
    ich habe die Daten noch nicht, wenn die Gui aufgebaut wird. Je nach Selektiertem Datensatz, soll die JTable gefüllt werden. Oder später, wenn ich weiter gekommen bin, auch geändert werden.

    Danke auch an Tsunami, dein Code sieht auf den ersten Blick gut aus. Aber ich hatte die lezten Tage so viele Fehlermeldungen, wegen Problemen mit ArrayGrenzen. Das ich es aufgegeben habe selbst ein Modell zu implementieren.

    Was ich jetzt herausgefunden habe, was eigentlich auch am einfachsten scheint. Das ist die Verwendung des DefaultTableModell. Keine extra Klasse, sondern dieses Modell verwenden. Die Daten werden in diesem Modell als Vektor organisiert. Was Dynamisch ist und bei Änderung auch die Oberfläche aktualisiert.

    Allerdings habe ich Eingaben von ca. 50 Wörtern je Feld. Das ist mit der jetzigen Grundlage nicht so Ansehnlich. Die Texte werden abgeschnitten, einen Zeilenumbruch gibt es wohl nicht.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    public class TwoLinesCellRenderer extends JTextArea implements
                TableCellRenderer {
            public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected, boolean hasFocus, int row,
                    int column) {
                setText(value.toString()); // Value kann String mit \n enthalten
     
                return this;
            }
        };
    na egal, auch damit gibt es kein vernünftiges Rendering....
    Geändert von zitro-java (16.11.10 um 20:47 Uhr)
     

Ähnliche Themen

  1. JTable dynamisch füllen
    Von DonAqua im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 18.02.08, 16:09
  2. JTable dynamisch befüllen
    Von Myar im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 14.12.07, 15:22
  3. JTable dynamisch erzeugen
    Von Matze82 im Forum Java
    Antworten: 6
    Letzter Beitrag: 19.09.05, 14:48
  4. JTable dynamisch aufbauen
    Von Matze82 im Forum Java
    Antworten: 3
    Letzter Beitrag: 09.06.05, 14:26
  5. JTable dynamisch füllen.
    Von Phil_adelphia im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 10.02.05, 10:06

Stichworte