Torzenie w petli nowych obiektow z indexami

0
List<Zgloszenia>  zglos  = Arrays.asList(
				new Zgloszenia  (""+ pierwsza ,""+ druga ,""+ trzecia ,""+ czwarta ,"","",""));
                 
            Element  root = new Element("zgloszenie");
		for(Zgloszenia p: zglos)
			root.appendChild(p.getXML());

Wie ktos moze jak zmienic ten kod zeby w petli tworzyl mi nowe obiekty??
Zeby elemnty byly z indexami??

1
List<Zgloszenia> zglos = Arrays.asList(new Zgloszenia("" + pierwsza, "" + druga, "" + trzecia, "" + czwarta, "", "", ""));

Element  root = new Element("zgloszenie");
for(int i = 0; i < zglos.size(); i++) {
    root.appendChild(zglos.get(i).getXML());
    new Object(); // tworzenie nowego obiektu
    // tu gdzieś dodaj sobie indeks (i) do elementu
}

Sprecyzuj.

0

na razie sprawdzam o Twoje rozwiazanie chyba dobrze jest troche mi to zajmie :P

Nierozumiem tylko tego:
// tu gdzieś dodaj sobie indeks (i) do elementu
i po co tworzy sie ten objekt
new Object();

??

1

Wie ktos moze jak zmienic ten kod zeby w petli tworzyl mi nowe obiekty??

No to tworzy.

0

oki to wiem juz zauwazylem ;) dzieki.
Teraz jest inny problem w ogóle to chodzi o to by stworzyl xml ale umial dodawac nowe elementy czyli tworzyl tak:

<?xml version="1.0" encoding="Windows-1250"?> <zgloszenie> <dane=1> <nr>ff</nr> <data>ff</data> <imie>f</imie> <nazwisko>fff</nazwisko> <sprzet /> <opis /> <status /> </dane> <dane=2> <nr>fffh</nr> <data>rrrrrrr</data> <imie>rrrr</imie> <nazwisko>rr</nazwisko> <sprzet /> <opis /> <status /> </dane> </zgloszenie>

a nie :

<?xml version="1.0" encoding="Windows-1250"?> <zgloszenie> <dane> <nr>ff</nr> <data>ff</data> <imie>f</imie> <nazwisko>fff</nazwisko> <sprzet /> <opis /> <status /> </dane> </zgloszenie> <?xml version="1.0" encoding="Windows-1250"?> <zgloszenie> <dane> <nr>fffh</nr> <data>rrrrrrr</data> <imie>rrrr</imie> <nazwisko>rr</nazwisko> <sprzet /> <opis /> <status /> </dane> </zgloszenie>

O to kod:


package pl.toXML.app;
import nu.xom.*;
import java.io.*;
import java.util.*;


	
public class Zgloszenia {
	public String nr, data, imie, nazwisko, sprzet, opis, status;
        public static String xml;
        
        
	
        
	public Zgloszenia(String nr, String data, String imie, String nazwisko, String sprzet, String opis, String status){
		this.nr = nr;
		this.data = data;
		this.imie = imie;
		this.nazwisko = nazwisko;
		this.sprzet = sprzet;
		this.opis = opis;
		this.status = status;
                this.xml = xml;
                
	}
	//Tworzy element (Element) XML na bazie obiektu Zgloszenie (this):
	
	
        
        public Element getXML(){
		Element zgloszenie = new Element("zgloszenie");
		Element nrid = new Element("nr");
		nrid.appendChild(nr);
		Element dataid = new Element("data");
		dataid.appendChild(data);
		Element imieid = new Element("imie");
		imieid.appendChild(imie);
		Element nazwiskoid = new Element("nazwisko");
		nazwiskoid.appendChild(nazwisko);
		Element sprzetid = new Element("sprzet");
		sprzetid.appendChild(sprzet);
		Element opisid = new Element("opis");
		opisid.appendChild(opis);	
		Element statusid = new Element("status");
		statusid.appendChild(status);
		
		zgloszenie.appendChild(nrid);
		zgloszenie.appendChild(dataid);
		zgloszenie.appendChild(imieid);
		zgloszenie.appendChild(nazwiskoid);
		zgloszenie.appendChild(sprzetid);
		zgloszenie.appendChild(opisid);
		zgloszenie.appendChild(statusid);
		
		return zgloszenie;
	}
        
     
	//Konstruktor przywracający obiekt Zgloszenie z elementu XML:
	public Zgloszenia(Element zgloszenie){
		nr = zgloszenie.getFirstChildElement("nr").getValue();
		data = zgloszenie.getFirstChildElement("data").getValue();
		imie = zgloszenie.getFirstChildElement("imie").getValue();
		nazwisko = zgloszenie.getFirstChildElement("nazwisko").getValue();
		sprzet = zgloszenie.getFirstChildElement("sprzet").getValue();
		opis = zgloszenie.getFirstChildElement("opis").getValue();
		status = zgloszenie.getFirstChildElement("status").getValue();
	}
	public String toString(){return nr + " " + data;}
	//Dla czytelności:
	public static void format(OutputStream os, Document doc) throws Exception{
		Serializer serializer = new Serializer(os,"Windows-1250");
		serializer.setIndent(4);
		serializer.setMaxLength(60);
		serializer.write(doc);
		serializer.flush();
	}
       public static void dodajrekord () throws Exception {

		 String pierwsza = app.Zgloszenie.jTextField2.getText();
            String druga = app.Zgloszenie.jTextField3.getText();
            String trzecia = app.Zgloszenie.jTextField4.getText();
            String czwarta = app.Zgloszenie.jTextArea1.getText();
List<Zgloszenia> zglos = Arrays.asList(new Zgloszenia("" + pierwsza, "" + druga, "" + trzecia, "" + czwarta, "", "", ""));
 

Element root = new Element("zgloszenie");
for(int i = 0; i < zglos.size(); i++) {
    root.appendChild(zglos.get(i).getXML());
    new Object(); // tworzenie nowego obiektu
   
             }
        }

	public static void glowny() throws Exception{
             
          
            
		Document doc = new Document(root);
		format(System.out, doc);
		format(new BufferedOutputStream(new FileOutputStream(
				"zgloszenie.xml")), doc);
                
	}
        
}

dodaj rekord w zamysle bedzie wywolywany w buttonie dodaj i bedzie dodawac rekordy
a glowny w zapisz i bedzie zapisywac do xml
Nie wiem czy w ogóle dobrze mysle

0

Myslalem zeby przy

 Document doc = new Document(root); 

wczytywal tego roota
ale blad wyrzuca

SORY ZA POST POD POSTEM

1

Nazwa typu "Zgloszenia" sugeruje, że jest to kolekcja zgłoszeń, a nie jest. Chyba sam się gubisz. Ja zrozumiałem to tak, że w dokumencie może być wiele zgłoszeń, a każde z nich może mieć wiele zestawów danych. Czy oprócz danych, zgłoszenie ma zawierać coś jeszcze? Czy nie logiczniejszy byłby taki format:

<zgloszenie>
    <nr>ff</nr>
    <data>ff</data>
    <imie>f</imie>
    <nazwisko>fff</nazwisko>
    <sprzet/>
    <opis/>
    <status/>
 </zgloszenie>
<zgloszenie>
    <nr>fffh</nr>
    <data>rrrrrrr</data>
    <imie>rrrr</imie>
    <nazwisko>rr</nazwisko>
    <sprzet/>
    <opis/>
    <status/>
 </zgloszenie>

?

Kod:

public class Zgloszenie {
    private String nr;
    private String data;
    private String imie;
    private String nazwisko;
    private String sprzet;
    private String opis;
    private String status;

    public Zgloszenie(String nr, String data, String imie, String nazwisko, String sprzet, String opis, String status) {
        this.nr = nr;
        this.data = data;
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.sprzet = sprzet;
        this.opis = opis;
        this.status = status;
    }

    public Zgloszenie(Element xml) {
        nr = xml.getFirstChildElement("nr").getValue();
        data = xml.getFirstChildElement("data").getValue();
        imie = xml.getFirstChildElement("imie").getValue();
        nazwisko = xml.getFirstChildElement("nazwisko").getValue();
        sprzet = xml.getFirstChildElement("sprzet").getValue();
        opis = xml.getFirstChildElement("opis").getValue();
        status = xml.getFirstChildElement("status").getValue();
    }

    public Element getXML() {
        Element zgloszenie = new Element("zgloszenie");

        Element nrid = new Element("nr");
        nrid.appendChild(nr);

        Element dataid = new Element("data");
        dataid.appendChild(data);

        Element imieid = new Element("imie");
        imieid.appendChild(imie);

        Element nazwiskoid = new Element("nazwisko");
        nazwiskoid.appendChild(nazwisko);

        Element sprzetid = new Element("sprzet");
        sprzetid.appendChild(sprzet);

        Element opisid = new Element("opis");
        opisid.appendChild(opis);

        Element statusid = new Element("status");
        statusid.appendChild(status);

        zgloszenie.appendChild(nrid);
        zgloszenie.appendChild(dataid);
        zgloszenie.appendChild(imieid);
        zgloszenie.appendChild(nazwiskoid);
        zgloszenie.appendChild(sprzetid);
        zgloszenie.appendChild(opisid);
        zgloszenie.appendChild(statusid);

        return zgloszenie;
    }

    @Override
    public String toString() {
        return "Zgloszenie nr: " + nr + " (" + data + ")";
    }
}


public class Zgloszenia {
    private List<Zgloszenie> listaZgloszen = new LinkedList<Zgloszenie>();

    public Zgloszenia() {
    }

    public Zgloszenia(Element xml) {
        Elements zgloszenia = xml.getChildElements("zgloszenie");
        for (int i = 0; i < zgloszenia.size(); i++) {
            listaZgloszen.add(new Zgloszenie(zgloszenia.get(i)));
        }
    }

    public void dodajZgloszenie(Zgloszenie zgloszenie) {
        listaZgloszen.add(zgloszenie);
    }

    public Element getXML() {
        Element zgloszenia = new Element("zgloszenia");

        for (Zgloszenie zgloszenie : listaZgloszen) {
            zgloszenia.appendChild(zgloszenie.getXML());
        }

        return zgloszenia;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();

        builder.append("Zgloszenia:\n");
        for (Zgloszenie zgloszenie : listaZgloszen) {
            builder.append("  ").append(zgloszenie).append('\n');
        }

        return builder.toString();
    }
}


public class Main {
    public static void main(String[] args) throws Exception {
        Zgloszenia zgloszenia = new Zgloszenia();

        Zgloszenie z1 = new Zgloszenie("ff", "ff", "f", "fff", "", "", "");
        Zgloszenie z2 = new Zgloszenie("fffh", "rrrrrrr", "rrrr", "rr", "", "", "");

        zgloszenia.dodajZgloszenie(z1);
        zgloszenia.dodajZgloszenie(z2);

        Document doc = new Document(zgloszenia.getXML());
        format(new BufferedOutputStream(new FileOutputStream("zgloszenie.xml")), doc);

        doc = parse(new BufferedInputStream(new FileInputStream("zgloszenie.xml")));
        System.out.println(new Zgloszenia(doc.getRootElement()));
    }

    private static void format(OutputStream os, Document doc) throws Exception {
        Serializer serializer = new Serializer(os, "Windows-1250");
        serializer.setIndent(4);
        serializer.setMaxLength(60);
        serializer.write(doc);
        serializer.flush();
    }

    private static Document parse(InputStream is) throws Exception {
        return new Builder().build(is);
    }
}
0

Rzeczywiscie mialo byc tak sorki za wprowadzenie w blad:

<zgloszenie>
    <nr>ff</nr>
    <data>ff</data>
    <imie>f</imie>
    <nazwisko>fff</nazwisko>
    <sprzet/>
    <opis/>
    <status/>
 </zgloszenie>
<zgloszenie>
    <nr>fffh</nr>
    <data>rrrrrrr</data>
    <imie>rrrr</imie>
    <nazwisko>rr</nazwisko>
    <sprzet/>
    <opis/>
    <status/>
 </zgloszenie>

Wszystko ok naprawde szybki jestes hehe

Tylko szkopol w tym ze ja to musze miec w aplikacji okienkowej .....
Bede mial problem z wczytywaniem z okien po wcisnieiu buttona

0

Rzeczywiscie mialo byc tak sorki za wprowadzenie w blad:

<zgloszenie>
    <nr>ff</nr>
    <data>ff</data>
    <imie>f</imie>
    <nazwisko>fff</nazwisko>
    <sprzet/>
    <opis/>
    <status/>
 </zgloszenie>
<zgloszenie>
    <nr>fffh</nr>
    <data>rrrrrrr</data>
    <imie>rrrr</imie>
    <nazwisko>rr</nazwisko>
    <sprzet/>
    <opis/>
    <status/>
 </zgloszenie>

Wszystko ok naprawde szybki jestes hehe

Tylko szkopol w tym ze ja to musze miec w aplikacji okienkowej .....
Bede mial problem z wczytywaniem z okien po wcisnieiu buttona

1
public void actionPerformed(ActionEvent e) {
    String nr = app.Zgloszenie.jTextField2.getText();
    String data = app.Zgloszenie.jTextField3.getText();
    String imie = app.Zgloszenie.jTextField4.getText();
    String nazwisko = app.Zgloszenie.jTextArea1.getText();
    zgloszenia.add(new Zgloszenie(nr, data, imie, nazwisko, "", "", ""));
}

Coś takiego wrzuć do listenera buttona od zapisywania. Musisz mieć tylko referencję zgloszenia, więc albo ją sobie wszędzie przekazuj, albo ewentualnie zrób z klasy Zgloszenia singletona.

0

W buttonie zrobilem cos takiego:

private void zapisz(java.awt.event.ActionEvent evt) {                        
        try
            
        {
   
    
    
    
    Zgloszenia zgloszenia = new Zgloszenia();
    
   String nr = app.Zgloszenie.jTextField2.getText();
    String data = app.Zgloszenie.jTextField3.getText();
    String imie = app.Zgloszenie.jTextField4.getText();
    String nazwisko = app.Zgloszenie.jTextArea1.getText();
    zgloszenia.dodajZgloszenie(new Zgloszeniee(nr, data, imie, nazwisko, "", "", "")); 
        
        
    System.out.println(zgloszenia);
            Document doc = new Document(zgloszenia.getXML());
        format(new BufferedOutputStream(new FileOutputStream("zgloszenie.xml")), doc);
 
        doc = parse(new BufferedInputStream(new FileInputStream("zgloszenie.xml")));
        System.out.println(new Zgloszenia(doc.getRootElement()));
      
        } 
        catch(Exception e){new Błąd().setVisible(true);
        }
            
                 // TODO add your handling code here:
    }                

Tworzy mi xmla ale nadpisuje stary a chce zeby zgloszenie mi dodawalo ......... doszlem praktycznie do tego samego co wczesniej......
Zgloszeniee - to ta Twoja klasa Zgloszenie
Zgloszenie to moja nazwa formy bo sie gryzly a nie chcialo mii sie zmieniac w tej mojej formie
Klasy wykorzystalem te co mi dales Zgloszenia i Zgloszenie

1

Bo tworzysz cały czas nowy obiekt Zgloszenia. Masz go stworzyć raz i potem w tej metodzie używać wyłącznie jego.

private Zgloszenia zgloszenia; // pole zgloszenia

// Gdzieś podczas inicjalizacji:
zgloszenia = new Zgloszenia(new Builder().build(new FileInputStream("zgloszenie.xml")).getRootElement()); // wczytywanie zgłoszeń wcześniej zapisanych

// W metodzie actionPerformed:
String nr = app.Zgloszenie.jTextField2.getText();
String data = app.Zgloszenie.jTextField3.getText();
String imie = app.Zgloszenie.jTextField4.getText();
String nazwisko = app.Zgloszenie.jTextArea1.getText();
zgloszenia.dodajZgloszenie(new Zgloszeniee(nr, data, imie, nazwisko, "", "", ""));

// No i potem zapis do pliku, używając obiektu zgloszenia
0

Hehe dzieki wielkie.
Zebys mi nie pomogl to nie zrobilbym tego.
Jak teraz patrze to to w miare proste jest ;)
Cały czas robilem jeden blad ;)
W zlym miejscu inicjalizowalem Zgloszenia jeszcze raz dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1