JTable mit Daten füllen

ratze79

Mitglied
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:
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:
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:
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
 
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:
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"});
 
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
 
Zurück