# JTable mit Icons in DB speichern



## Shaguar (27. Sep 2007)

Hallo zusammen,
also ich würde gerne folgendes realisieren:
Eine JTable mit einer Spalte bei der man selbständig Flaggen hinzufügen oder entfernen kann und wenn man fertig ist das Ganze dann in einer Datenbank zu speichern?
Die Flaggen könnte man vllt mit Hilfe eines Buttons oder mit einem Rechtsklick ein JDialog öffnen und dann per Drag&Drop die Flaggen die man haben möchte in die Spalte ziehen. Dann würde sich aber die Frage stellen wie speicher ich das in der Datenbank ab.
Also es ist einfach eine Länder-Spalte bei der man nach belieben eine Deutschland-Flagge oder England Flagge oder auch beides hinzufügen kann und das dann irgendwie persistent machen.
Hab also noch nicht so wirklich nen genauen Plan wie ich das alles umsetzen kann/soll.
Habt ihr da eventuell irgendwelche Ideen oder Vorschläge?


----------



## André Uhres (27. Sep 2007)

Speicher einfach die Landeskennzeichen. Beispiel: Flaggen.jar (Quellcode im jar)


----------



## Shaguar (27. Sep 2007)

Cool danke, hat mich ein ganzes Stück voran gebracht.
Ein paar Fragen hätt ich dazu aber noch.
Was macht denn das FlaggenModel?
Wenn ich bei mir statt des FlaggenModels ein DefaultTableModel benutze funktioniert eigentlich auch alles.


----------



## André Uhres (28. Sep 2007)

Shaguar hat gesagt.:
			
		

> ..Was macht denn das FlaggenModel?
> Wenn ich bei mir statt des FlaggenModels ein DefaultTableModel benutze funktioniert eigentlich auch alles.


Funktioniert denn auch die Persistenz?
*XMLEncoder *persistiert nämlich ausschliesslich *JavaBeans*. DefaultTableModel ist aber keine JavaBean, afaik.
Deshalb hab ich das FlaggenModel gemacht, und auch, weil die Datei Flaggen.xml dadurch übersichtlicher wird.

Durch eine Erweiterung könnte man vielleicht auch aus DefaultTableModel eine *JavaBean *machen.
Im unten stehenden Code werden zum Beispiel die Beanmethoden *setDataVector * und *getColumnIdentifiers *eingeführt, die es in dieser Form nicht im DefaultTableModel gibt (zum Glück sind die Variablen "dataVector" und "columnIdentifiers" nicht private sondern protected).
Wenn wir dieses benutzen wollten, dann könnte unser Programm ungefähr so aussehen: DefFrame.java

```
package flaggen;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
public class DefModel extends DefaultTableModel {
    public DefModel() {
        super();
    }
    public void setDataVector(Vector v) {
        dataVector = v;
    }
    public Vector getColumnIdentifiers(){
        return columnIdentifiers;
    }
}
```


----------



## Shaguar (28. Sep 2007)

Ja wie schon gesagt, ich speicher das alles ja in einer Datenbank, werde ich in Kürze mal testen obs klappt und dann nochmal bescheid sagen.


----------



## André Uhres (28. Sep 2007)

Shaguar hat gesagt.:
			
		

> ..ich speicher das alles ja in einer Datenbank..


Achso, ich dachte einfach nur du wolltest _das dann irgendwie persistent machen_ :wink:


----------



## Shaguar (30. Sep 2007)

ähm mal ne andere Frage, hat nicht direkt mit dem Problem zu tun:
Wie kann ich denn 2 ImageIcons überlappen lassen?
Was ich machen will ist folgendes, statt "d" oder "gb" könnte man auch "cd2" oder "cd5" reinschreiben und er soll einfach 2 oder 5 CD Symbole rendern aber nicht nebeneinander sonder so teilweise überlappt das sie nicht soviel Platz verbrauchen.


----------



## André Uhres (30. Sep 2007)

Shaguar hat gesagt.:
			
		

> ..Wie kann ich denn 2 ImageIcons überlappen lassen?..


Mit NullLayout oder OverlayLayout oder Layoutmanager selber schreiben


----------



## Shaguar (30. Sep 2007)

Yo stimmt, Danke.
Äh eine letzte Frage noch, da ich ja in der Zelle ein JPanel habe, wird sie beim markieren der Zeile nicht mitmarkiert und das sieht ein wenig blöd aus, kann man da was machen das auch ein JPanel markiert wird?


----------



## Shaguar (1. Okt 2007)

doch noch was 
Kann ich auch mehr als ein Icon auf ein Label setzen?
Weil sonst muss ich alle Labels und Icons vorher erstellen auch wenn ich nicht weiss wieviel ich brauchen werden und diese dann übereinander legen.
Theoretisch möglich wäre zb "cd12" , ich will ja nicht 12 ImageIcons und 12 JLabels erstellen und dann nur die benutzen die ich brauche.


----------



## André Uhres (1. Okt 2007)

Wie ich das verstanden habe, brauchst du ja nur ein einziges ImageIcon mit dem CD-Symbol und ein einziges JLabelarray:

```
labels = new JLabel[12];
        for (int i = 0; i < labels.length; i++) {
            labels[i] = new JLabel(cdIcon);
            labels[i].setBounds(i * 5, 0, 30, 20);
            labels[i].setVisible(false);
            add(labels[i]);
        }
```
In einer for-Schleife machst du dann später jeweils aus dem Array soviel sichtbar (setVisible) wie du willst.

Der Code zum Markieren:

```
...
    Border focus = BorderFactory.createLineBorder(Color.GRAY);
    Border empty = BorderFactory.createEmptyBorder();
...
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
...
        setBackground(table.getBackground());
        if (isSelected) {
            setBackground(table.getSelectionBackground());
        }
        setBorder(empty);
        if (hasFocus) {
            setBorder(focus);
        }

        return this;
    }
....
```


----------

