JTable mit Icons in DB speichern

  • Themenstarter Themenstarter Shaguar
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

Shaguar

Gast
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?
 
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.
 
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

Code:
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;
    }
}
 
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.
 
ä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.
 
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?
 
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.
 
Wie ich das verstanden habe, brauchst du ja nur ein einziges ImageIcon mit dem CD-Symbol und ein einziges JLabelarray:
Code:
       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:
Code:
...
    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;
    }
....
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben