JTable mit checkboxen/comboboxen und farbigem Text serialisieren per XML

pel

Grünschnabel
JTable mit checkboxen/comboboxen und farbigem Text serialisieren per XML

Hallo,

ich habe eine JTable mit allerlei Objekten und Formatierungen. Ist es überhaupt möglich mit XML diese Daten zu serialisieren?

Achso ich benutze JDK 6 und das Programm läuft hinterher auch nur auf einem PC mit JRE 6!
 
Zuletzt bearbeitet:
Hallo,

könntest du dein Problem mal etwas erläutern? Von deiner bisherigen Beschreibung her, kann ich mir nicht wirklich vorstellen was du machen willst und was dein Problem ist.

MFG

zEriX
 
Hi du,

alles was du in der Tabelle siehst:

Zustand der Checkboxen, Auswahltext in den JComboboxen, Text und vor allem die Farbe des Textes sollen serialisiert werden. Die letzte Spalte wird später noch in jeder Zelle ein Image haben je nach dem ob die spalte mit den JComboboxen Programm ausgewählt hat, soll in der letzten spalten eine combobox erscheinen wo man zwischen einem Bild CD und Netzlaufwerk auswählen kann. Wobei mir ist jetzt erst mal das serialisieren wichtig.

Wie gehe ich da vor als Anfänger der null ahnung von serialisieren und xml hat ;-)
 

Anhänge

  • Untitled-1.jpg
    Untitled-1.jpg
    88,4 KB · Aufrufe: 158
Hallo hallo,

ich weiss jetzt nicht genau was Du mit dem xml vorhast, aber ich vermute mal Du willst das Objekt irgendwie speichern oder verschicken...

...das kannst Du dann folgendemaßen machen... Du bastelst Dir ein Objekt, dass alle Werte einer Zeile annehmen kann, incl. Bild und so... Dieses Objekt muss Du dann als Serializable erweitern.

z.B.:

Code:
public class Bla implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6317301067089432891L;

	private Werte werte = ....
	
	public Bla() {
}

Wichtig ist, wenn Du das speichern oder irgenwo hinschicken willst, dass das Objekt eine serial Nummer hat, das brauchst Du später um das Objekt wieder zu Bla zu casten...

Speichern und laden geht dann ganz einfach, indem Du mit nem ObjectOutputStream das Objekt speicherst bzw. mit ObjectInputStream wieder lädtst...

Jetzt könntest Du alle Zeilen als einzelne Dateien speichern bzw. verschicken oder Du speicherst die Liste auch in einem Serializable Objekt und speicherst nur dieses.

Viele Grüße
Phil
 
Hallo hallo,

ich weiss jetzt nicht genau was Du mit dem xml vorhast, aber ich vermute mal Du willst das Objekt irgendwie speichern oder verschicken...


Hallo Halli ;-)

es geht darum das der komplette inhalt der Tabelle abgespeichert wird da irgendwelche Änderungen vorgenommen wurde (neue Zeilen mit neuem Text z.B.). Dies muss in einer Datei abgespeichert werden. Das Dateiformat ist egal aber auch völlig unbekannt was ich da nehmen kann oder das geeignetste wäre. Wenn das Programm nun geschlossen wird soll per jbutton click der inhalt der tabelle wiederhergestellt werden genau so sprich deserialisiert würde man wahrscheinlich sagen.

...das kannst Du dann folgendemaßen machen... Du bastelst Dir ein Objekt, dass alle Werte einer Zeile annehmen kann, incl. Bild und so... Dieses Objekt muss Du dann als Serializable erweitern.
Einer Zeile ? Ich möchte aber alle Zeilen in einem Object speichern wie mache ich dann dass ? Vor allem wenn ich in einer bestimmten Zelle einer Tabelle einen bestimmten Textteil des JLabls mit html gefärbt habe (Zelle ist per Default ja ein JLabel...), wie serialisiere ich dann den Text mit der normalen und dem teils gefärbten Text ? o_0


z.B.:

Code:
public class Bla implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6317301067089432891L;

	private Werte werte = ....
	
	public Bla() {
}

Wichtig ist, wenn Du das speichern oder irgenwo hinschicken willst, dass das Objekt eine serial Nummer hat, das brauchst Du später um das Objekt wieder zu Bla zu casten...

Du meinst das serialVersionUID ? yo das will eclipse immer haben ;-)

Speichern und laden geht dann ganz einfach, indem Du mit nem ObjectOutputStream das Objekt speicherst bzw. mit ObjectInputStream wieder lädtst...
darüber habe ich mich schon bissl eingelesen dass dürfte net das Problem sein, sondern, dass die Daten richtig serialisiert werden. Ok wie mich der liebe Gott mit Hirn ausgestattet hat habe ich kurz Excel von M$ geladen un in eine Zelle einen rotenText und blauenText geschrieben und das ganze nach .XML exportiert:

Code:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>bn</Author>
  <LastAuthor>bn</LastAuthor>
  <Created>2007-09-21T10:32:54Z</Created>
  <Company>bn</Company>
  <Version>11.5606</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>13170</WindowHeight>
  <WindowWidth>15180</WindowWidth>
  <WindowTopX>480</WindowTopX>
  <WindowTopY>60</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s22">
   <Font x:Family="Swiss" ss:Color="#0000FF"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Tabelle1">
  <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="60">
   <Column ss:AutoFitWidth="0" ss:Width="189.75"/>
   <Column ss:AutoFitWidth="0" ss:Width="186"/>
   <Column ss:AutoFitWidth="0" ss:Width="195.75"/>
   <Row>
    <Cell ss:StyleID="s22"><ss:Data ss:Type="String"
      xmlns="http://www.w3.org/TR/REC-html40"><Font html:Color="#0000FF">blauerText</Font><Font
       html:Color="#FF0000"> roterText</Font></ss:Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.4921259845"/>
    <Footer x:Margin="0.4921259845"/>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <Selected/>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Tabelle2">
  <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="60"/>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.4921259845"/>
    <Footer x:Margin="0.4921259845"/>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Tabelle3">
  <Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="60"/>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.4921259845"/>
    <Footer x:Margin="0.4921259845"/>
    <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996"
     x:Right="0.78740157499999996" x:Top="0.984251969"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>

Also muss es in java ja auch irgendwie gehen... Wo lege ich denn fest bzw. wenn ich XML wähle als export/import format, dann sollte ich wahrscheinlich das wählen oder?

Code:
<Cell ss:StyleID="s21"><ss:Data ss:Type="String"
      xmlns="http://www.w3.org/TR/REC-html40">
       <Font html:Color="#0000FF">blauerText</Font>
       <Font html:Color="#FF0000"> roterText</Font>
</ss:Data></Cell>



das wäre dann eine einzelne Zelle aus der .XML Datei sprich für jeden Text mit unterschiedlicher formatierung wird der html code dafür abgespeichert. Wie ist das denn nu mit dem XML format das ja ganz nett zu sein scheint, Diese Tags wie <Font> oder <Cell> sind die von MS Excel vorgegeben oder stellt die XML zur Verfügung ?

wäre das das Richtige für mich?: http://simple.sourceforge.net/

Jetzt könntest Du alle Zeilen als einzelne Dateien speichern bzw. verschicken oder Du speicherst die Liste auch in einem Serializable Objekt und speicherst nur dieses.

einzelne Dateien OMG ;P also wenn dann speichere ich die tabelleliste in einem Object welches dann am Besten nach .xml geht... Sieht das dann praktisch so aus, dass ich Zeile für Zeile die TAbelle durchlaufe beim serialisieren und alle spalten mit den werten auslesen? z.B. so:

//false/true für checkbox zustand
private Boolean status = true; -> wobei der wert true mit sicherheit nicht reicht, denn es muss ja wieder beim laden eine jcheckbox erscheinen in der Zelle

//"Programm","Update","Entfernen"-Auswahl-Eintrag aus der JCombobox -> wobei der Eintrag hier auch net reicht, da ja auch eine JCombobox erscheinen muss in der Zelle mit dem Eintrag-wert.

private String Auswahl = Programm; oder Update je nach status der JCombobox
private String text = text_in_Zelle wobei ich ja unterschiedlich formatierten Text habe das könnte kniffelig werden...

meld mich bald wieder stay tuned und danke fürs helfen!
 
jetzt habe ich nochmals kurz eine Frage, wenn ich serialisiere, muss ich dann xml nehmen bzw. hätte das irgendwelche vorteile?

Und wenn ich die serialisierten Daten wieder in die jtable einlesen mache ich das dann in der for schleife mit setVallueAt etc.. ? weil wenn ja warum kann man das ganze dann nicht in einer .txt abspeichern? Ich verstehe immer noch net den sinn bzw. ab wann überhaupt ich serialisieren muss... :confused:
 
Hallo hallo,

Du könntest auch alle Daten in einem Textfile speichern, allerdings wird das schwierig, wenn Dein Objekt Bilder beinhaltet. Dann müsstest Du die Bilder seperat speichern. Das Serialized Object kannst Du so wie es war direkt wieder als Objekt einlesen. Mit allen Bildern und Werten, die das Objekt beinhaltet. Allerdings könntest Du für Deine Sachen auch eine Datenbank benutzen.

Viele Grüße
Phil
 
Allerdings könntest Du für Deine Sachen auch eine Datenbank benutzen.
Viele Grüße
Phil
HOi,

das mit der DAtenbank (man sollte ja über alle Möglichkeiten Bescheid wissen) kannst du das näher oder kurz erläutern? Kann man in der Datenbank bilder und farbigen TExt speichern? Die einzelnen Zellen meiner Tabelle sind keine JLabels sondern vom Typ JTextPane. Dieses beinhaltet farbigen Text.

Also ich denke ich teile das Programme in 2 Teile ein, da ich am Freitag das Programm meinem Bekannte geben ders braucht. Das machbare im Moment für mich ich nenne es Version 1.0.

Ich nehme CSV format und lese den true/false wert aus der checkbox aus, lese den Eintrag aus der Jcombobox aus und beschränke mich auf schwarzen Text.

In Version 2.0 kommt noch farbiger TExt hinzu sowie icons zur Auswahl in der Jcombobox. Das ganze richtig gespeichert bzw. serialsiert.

Benötigtes Format: XML oder eigenes Format oder DAtenbank? je nach Vorteil/Nachteil
 
Zurück