tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1166
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ratze79 ratze79 ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    80
    Hallo ich habe ein Problem!
    Und zwar lese ich aus einer XML-Datei Vokabeln und deren Übersetzung aus. Diese werden in einem Vector gespeichert.
    Diese möchte ich nun in einem JTable in 2 Spalten ausgeben lassen.
    Als erstes die Klasse für die Vokabeln:
    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
    
    public class Vokabeln {
     
      private String deutsch;
      private String englisch;
         
      public Vokabeln() {}
      
    //get-Methode für deutsche Vokabeln
      public String getDeutsch() {
        return deutsch;
      }
    //set-Methode für deutsche Vokabeln
      public void setDeutsch(String deutsch) {
        this.deutsch = deutsch;
      }
    //get-Methode für englische Vokabeln
      public String getEnglisch() {
        return englisch;
      }
    //set-Methode für englische Vokabeln
      public void setEnglisch(String englisch) {
        this.englisch = englisch;
      }
    }

    Hier Teile des XML-Parsers
    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
    
    public static Vector vokabelVector = new Vector();
    ...
    Vokabeln vokabeln = new Vokabeln();
     
    while (parser.nextTag() != XmlPullParser.END_TAG) 
            {
                parser.require(XmlPullParser.START_TAG, null, null);
                String name = parser.getName();
                         
                String text = parser.nextText();
                
                System.out.println ("<"+name+">"+text);
     
                //wenn tagname = deutsch wird der Eintrag in Vokabeln.setDeutsch gesetzt
                if (name.equals("deutsch"))
                    vokabeln.setDeutsch(text);
                //wenn tagname = englisch wird der Eintrag in Vokabeln.setEnglisch gesetzt
                else if (name.equals("englisch"))
                    vokabeln.setEnglisch(text);
     
                parser.require(XmlPullParser.END_TAG, null, name);
            }
     
            vokabelVector.addElement(vokabeln);

    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
    
    import java.awt.BorderLayout;
     
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.swing.JPanel;
    import javax.swing.JTable;
     
    import javax.swing.WindowConstants;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;
     
    public class Dictionary extends javax.swing.JFrame 
    {
        public static boolean dictionary_running;
        private JPanel jPanel_Dictionary;
        private JTable jTable_Dictionary;
        
        public TableModel jTable_DictionaryModel;
     
        public Dictionary(String s) {
            super();
            initGUI();
            
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    dispose();
                    dictionary_running = false;
                }
            });
        }
        
            private void initGUI() {
            try {
                setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                {
                    jPanel_Dictionary = new JPanel();
                    getContentPane().add(jPanel_Dictionary, BorderLayout.CENTER);
                    jPanel_Dictionary.setLayout(null);
                    {
     
                        for(int k= 0 ; k< ReadXML.vokabelVector.size() ;k++)
                        {
                            //Füllen des bookVectors mit Vokabeln
                            Vokabeln vokabeln = (Vokabeln) ReadXML.vokabelVector.elementAt(k);
                            
                            jTable_DictionaryModel = new DefaultTableModel(
                            new String[][] { { vokabeln.getDeutsch().toString(), vokabeln.getEnglisch().toString()} },
                            new String[] { "Column 1", "Column 2" });
                        
                        }
                        jTable_Dictionary = new JTable();
                        jPanel_Dictionary.add(jTable_Dictionary);
                        jTable_Dictionary.setModel(jTable_DictionaryModel);
                        jTable_Dictionary.setBounds(28, 28, 343, 210);
                    }
                }
                pack();
                setSize(400, 300);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     
    }
    Das war ein Versuch allerdings überschreibt er jetzt immer die erste Zeile, so dass am Ende nur eine Vokabel mit Übersetzung in der Tabelle steht. Weil er jedes Mal einen neuen String benutzt.
    Hat jemand einen Tipp für mich vielen Dank im voraus.

    Ratze79
     

  2. #2
    Avatar von celph_titled
    celph_titled celph_titled ist offline Mitglied Gold
    Registriert seit
    May 2007
    Beiträge
    107
    Hallo,

    in der Tabelle ist zum Schluss nur eine Zeile, weil das TableModel für jede Vokabel wieder überschrieben wird. Statt in jedem Durchlauf der for-Schleife ein neues Model anzulegen, müssten alle Vokabeln in einem Array gespeichert und erst zum Schluss ein Model erzeugt werden, ungefähr so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    String s[][] = new String[ReadXML.vokabelVector.size()][2];
    for(int k= 0; k < s.length; k++)
    {
         Vokabeln vokabeln = (Vokabeln) ReadXML.vokabelVector.elementAt(k);
         s[k][0] = vokabeln.getDeutsch().toString();
         s[k][1] = vokabeln.getEnglisch().toString();
    }
    jTable_DictionaryModel = new DefaultTableModel(s,new String[] {"Column 1", "Column 2"});
     

  3. #3
    ratze79 ratze79 ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    80
    Super hat geklappt, vielen Dank für die Hilfe!
    Wo der Fehler liegt hab ich mir auch schon gedacht, nur leider bin ich auf keine gescheite Lösunge gekommen.

    Gruß Ratze
     

Ähnliche Themen

  1. JTable aus Vector füllen
    Von tameck im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 14.04.08, 11:03
  2. JTable dynamisch füllen
    Von DonAqua im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 18.02.08, 16:09
  3. JTable mit Inhalt füllen
    Von Musicman75 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 7
    Letzter Beitrag: 09.08.07, 00:38
  4. Antworten: 2
    Letzter Beitrag: 09.07.06, 12:18
  5. JTable dynamisch füllen.
    Von Phil_adelphia im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 10.02.05, 10:06