# Dynamische Checkboxen



## orbi (20. Jun 2006)

HIIIILFE !!!!

Leute ich brauche mal wieder eure Hilfe. Ich hab ein problem mit meinen kleinen Freunden den Checkboxen....

Situation ist folgende :
Ich bastel grade eine Art Nachrichten Center (so ein bischen wie bei GMX o.ä.).

Ich habe eine SQl Abfrage auf eine DB losgelassen die mir die ID , den Betreff und den Zustand (also ob gelesen oder nicht bzw. ob bereits beantwortet) zurückgibt.

Innerhalt des ResultSets ertselle ich nun für jeden Datensatz eine Checkbox (bzw. versuche es).....

Mein Problem ist nun das nur die Checkbox die durch den letzten Datensatz erzeugt wird mir ihre ID zurückgibt, was es für mich etwas schwierig macht auf die Vorhergehendenn Nachrichten zuzugreifen.....

Hier mal ein bischen Code damit ihr ungefähr nachvollziehen könnt wo der "Hund begraben" liegt....

Ich hoffe inständig das mir einer von euch sagen kann wie man das richtig hinbekommt !!!!


```
while(resultSetNachrichtenUebersicht.next())
{
String msgCenterNachrichtID = resultSetNachrichtenUebersicht.getString(1);
String msgCenterNachrichtBetreff = 	resultSetNachrichtenUebersicht.getString(2);
String msgCenterNachrichtSenderID = resultSetNachrichtenUebersicht.getString(3);
boolean msgCenterNachrichtBeantwortet = resultSetNachrichtenUebersicht.getBoolean(4);
boolean msgCenterNachrichtGelesen = resultSetNachrichtenUebersicht.getBoolean(5);
// hinzufügen der Komponenten entsprechend der Anzahl ergebnisse
try
{
{
chkboxMsgCenterNachrichtLoeschen = new JCheckBox(msgCenterNachrichtID);
pnlMsgCenterAnzeige.add(chkboxMsgCenterNachrichtLoeschen);
chkboxMsgCenterNachrichtLoeschen.setBounds(120, voOben+2, 20, 20);
chkboxMsgCenterNachrichtLoeschen.setBackground(new java.awt.Color(255,255,255));
// Auslesen der checkbox labels/nachrichten id´s zur überprüfung
chkboxMsgCenterNachrichtLoeschen.setName(msgCenterNachrichtID);
}
}
catch(NullPointerException npe)
{
System.out.println("da hats gekracht : "+npe);
}
```

und hier noch der dazugehörende ItemListener :


```
chkboxMsgCenterNachrichtLoeschen.addItemListener(  new ItemListener(){
 public void itemStateChanged(ItemEvent e)
{
	System.out.println("name der selektierten checkbox : "+chkboxMsgCenterNachrichtLoeschen.getName());
}
});
```


Gruß
Ein etwas verzweifelter Orbi


----------



## André Uhres (20. Jun 2006)

orbi hat gesagt.:
			
		

> ..Mein Problem ist nun das nur die Checkbox die durch den letzten Datensatz erzeugt wird mir ihre ID zurückgibt..


Machst du addItemListener für jede Checkbox oder nur für die letzte?
Ausserdem müsstest du dies machen:

```
System.out.println("name der selektierten checkbox : "+((JCheckBox)e.getSource()).getName());
```


----------



## orbi (21. Jun 2006)

*Danke * das war ein *großer * schritt in die richtige richtung ,hatte  "clevererweise" nur einen listener reingeschrieben bzw. der den ich erstellt hatte war hinter dem resultset, wurde also nur einmal erzeugt....

Soll aber vorkommen das man etwas verwirrt ist nach einen 11.5 stunden arbeitstag ^^

Nun hätte ich direkt noch eine andere Frage, da ich ja das löschen der Nachrichten (sowohl einzeln als auch mehrere) möglich machen will war mein Gedanke nen Array zu erstellen und dort jeh nachdem ob die Checkbox einer Nachricht aktiviert wurde oder auch nicht die ID der entsprechenden Nachricht hinzuzufügen oder zu entfernen.

Gibts da eine cleverere Methode oder ist das so in ungefähr das was man als richtig erachten könnte ?


----------



## André Uhres (21. Jun 2006)

orbi hat gesagt.:
			
		

> ..da ich ja das löschen der Nachrichten (sowohl einzeln als auch mehrere) möglich machen will
> war mein Gedanke nen Array zu erstellen und dort jeh nachdem ob die Checkbox einer Nachricht aktiviert wurde
> oder auch nicht die ID der entsprechenden Nachricht hinzuzufügen oder zu entfernen...


Ein Array bringt wohl nichts. Erstens kann man da nichts entfernen oder hinzufügen und 
zweitens hast du ja schon alles was du brauchst in den Checkboxen.


----------



## orbi (21. Jun 2006)

:?: 
Warum bringt ein Array nichts? aus dem könnte ich doch dann die zur löschung anstehenden Nachrichten bzw. deren Ids auslesen?

aber auf den 2. Blick muss ich dir recht geben das mit dem löschen aus dem Array könnte schwierig werden   

hättest du evtl einen besseren Vorschlag wie ich die Id´s der Nachrichten in einer liste sammeln könnte und bei deaktivierung der Checkbox auch wieder daraus entfernen könnte ?

mir läuft so langsam die zeit davon ansonsten würde ich nicht so "dappisch" fragen sondern noch ein wenig rumprobieren...

Gruß
Robin


----------



## André Uhres (21. Jun 2006)

Tut mir leid, ich versteh dein Problem nicht: du hast ja alle Informationen in den Checkboxen. 
Wozu die gleiche Informationsstruktur noch einmal erstellen?


----------



## dieta (21. Jun 2006)

Dafür gibt's in Java eine ganze Menge Klassen.
z.B.:
 :arrow: LinkedList
oder
 :arrow: Vector


----------



## orbi (21. Jun 2006)

muss ganz ehrlich zugeben mein problem ist das mir nicht ganz klar ist, wie ich z.b. bei betätigen des Löschen Buttons alle  id´s der Selektierten Boxen auslese, aber so wie ich mich kenne mache ich es mir mal wieder unötig kompliziert..

deiner(André) Aussage nach müsste es ja recht simpel sein, kannste mir mal nen winck mit dem zaunpfahl geben (oder mir den zaunpfahl um die Ohren hauen) damit ich drauf komme ?


----------



## André Uhres (21. Jun 2006)

orbi hat gesagt.:
			
		

> ..mir nicht ganz klar ist, wie ich z.b. bei betätigen des Löschen Buttons alle  id´s der Selektierten Boxen auslese..




```
Component[] comps = jPanel1.getComponents();
        JCheckBox box = null;
        for (int i = 0; i < comps.length; i++) {
            if(comps[i] instanceof JCheckBox){
                box = (JCheckBox)comps[i];
                System.out.println("Name: "+box.getName()+"  Selected: "+box.isSelected());
            }
        }
```


----------



## orbi (21. Jun 2006)

*Dank dir 1000 mal* , ich werde das morgen direkt mal antesten...

und nochmal danek an alle die sich die mühe gemacht haben sich mit dem thread zu beschäftigen!!!

Gruß 
Robin


----------



## orbi (22. Jun 2006)

das klappt perfekt,     *DANKE*   !!!!!

hab mir noch ne kleine if bedingung dazu geschrieben und nun klappt alles so wie ich mir das vorgestellt habe ...

 :applaus:  :applaus:  :applaus: 

So nun werde ich mal schaun das ich die ganze Sache fertig bekomme und meinem Kunden dann eine voll funtionstüchtige Version in die Hand drücken kann...

Ich würde dir am liebsten ein virtuelles Bier spendieren @ André   

Gruß
Robin


----------



## André Uhres (22. Jun 2006)

orbi hat gesagt.:
			
		

> ..Ich würde dir am liebsten ein virtuelles Bier spendieren @ André   ..


Ich könnte dir ja auch meine Kontonummer geben


----------



## orbi (22. Jun 2006)

Hätte ich ein anständiges Gehalt und nicht nur mein AZUBI cash würde ich das ernsthaft in Erwägung ziehen, aber so währen die Überweisungskosten wahrscheinlich höher als der Betrag den ich dir zukommen lassen könnte  :wink:


----------



## André Uhres (22. Jun 2006)

orbi hat gesagt.:
			
		

> Hätte ich ein anständiges Gehalt ..


Hör auf.. ich hab ja nur Scherz gemacht.
Werde mich sehr davor hüten hier von jemandem Geld anzunehmen.
Das mit dem Bier wär aber nicht schlecht, wenn das nur ginge..


----------



## AlArenal (22. Jun 2006)

André Uhres hat gesagt.:
			
		

> Werde mich sehr davor hüten hier von jemandem Geld anzunehmen.
> Das mit dem Bier wär aber nicht schlecht, wenn das nur ginge..



Zum Glück geht das nicht. Microsoft würde sonst alle Bierbrauer aufkaufen und aus dem Markt drängen, um das eigene Microsoft Beer zu verkaufen. MS-typisch würde das natürlich nciht so dolli schmecken, wie die Sorten, die wir uns gerne in die Hirse ballern. Stattdessen wäre es mehr ein zerkauter Maniok-Brei, der durch die Spucke zum Gären angeregt wird... Ständig hätte man mit Flaschen zu kämpfen, die sich entweder nicht öffnen lassen, oder wo nichts drin ist. Spontan würden Flaschen auch mal einfach zu Bruch gehen und die trinken dürfte man erst nachdem man den RFID-Chip der Flasche eingescannt und die Daten zusammen mit persönlichen ANgaben an MS übermittelt hat, die dann die Authentizität bestätigen müssen - vorher ließe sich die Flasche nicht öffnen...

Eher gäbe ich mir die Kugel...


----------



## orbi (22. Jun 2006)

das du das mit der kohle nur scherzeshalber meintest ist mir schon klar   

aber zu mindest das virtuelle bier kann ich dir reichen 







 :wink:  

kk ich hör jetzt mal lieber auf sonst bekomm ich noch ärger wegen spammens....

Gruß
Robin


----------



## André Uhres (22. Jun 2006)

orbi hat gesagt.:
			
		

> ..ich hör jetzt mal lieber auf sonst bekomm ich noch ärger wegen spammens...


Ja, pass auf, stevg sperrt alles was nur irgendwie danach riecht  :!: 
Aber danke für das Bier, sieht lecker aus


----------



## orbi (22. Jun 2006)

Hab nun zu guter letzt doch noch ein _Problem _ bekommen, habe die Anwendung nun soweit fertig das die Nachrichten gelöscht bzw. betrachtet werden können. Nun ist folgendes Problem aufgetreten, beim ersten anzeigen des Panels geht noch alles gut, sprich ich kann die gewünschte Nachricht nach selektion der entsprechenden Checkbox anzeigen lassen.
Zur anzeige der Nachricht wird das Nachrichtenübersichtspanel geschlossen, wenn ich nun aber das nachrichtenübersichtspanel welches die Checkboxen enthält erneut öffnen will bekomme ich als status der checkboxen nur noch false zurück.....

Evtl. ist ja schonmal einer von euch über ein ähnliches Problem gestolpert und kann mir nen heissen tip geben woran es hängt....


Gruß
Robin


----------



## André Uhres (22. Jun 2006)

orbi hat gesagt.:
			
		

> ..wenn ich nun aber das nachrichtenübersichtspanel welches die Checkboxen enthält
> erneut öffnen will bekomme ich als status der checkboxen nur noch false zurück...


Du brauchst ja nur vor dem Öffnen des Nachrichtenübersichtspanels zu gucken ob es schonmal erzeugt wurde,
d.h. ob die Referenz auf das Panel nicht mehr null ist. In dem Fall erzeugst du kein neues Panel sondern nimmst
einfach das alte.


----------



## orbi (22. Jun 2006)

?*?*?

und wie stelle ich das genau an ?


----------



## André Uhres (22. Jun 2006)

orbi hat gesagt.:
			
		

> ..und wie stelle ich das genau an ?




```
/*
 * NachrichtenCenterDemo.java
 */
//package schnipsel3;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class NachrichtenCenterDemo extends JFrame {
    public NachrichtenCenterDemo() {
        super("NachrichtenCenter Demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setLocationRelativeTo(null);
        toolbar = new JToolBar();
        btUebersicht = new JToggleButton("Übersicht zeigen/verbergen");
        btUebersicht.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                btUebersichtActionPerformed(evt);
            }
        });
        toolbar.add(btUebersicht);
        getContentPane().add(toolbar, BorderLayout.NORTH);
    }
    private void btUebersichtActionPerformed(ActionEvent evt) {
        if(btUebersicht.isSelected()){
            if(uebersicht == null){
                uebersicht = new JPanel();
                JCheckBox box = null;
                for (int i = 0; i < 4; i++) {
                    box = new JCheckBox();
                    box.setName(""+i);
                    box.addActionListener(new ActionListener(){
                        public void actionPerformed(ActionEvent e) {
                            JCheckBox box = (JCheckBox)e.getSource();
                            System.out.println(box.getName()+" "+box.isSelected());
                        }
                    });
                    uebersicht.add(box);
                }
            }
            add(uebersicht);
            showStatus();
        }else{
            remove(uebersicht);
        }
        validate();
        repaint();
    }
    private void showStatus(){
        Component[] comps = uebersicht.getComponents();
        JCheckBox box = null;
        for (int i = 0; i < comps.length; i++) {
            if(comps[i] instanceof JCheckBox){
                box = (JCheckBox)comps[i];
                System.out.print(box.isSelected()+" ");
            }
        }
        System.out.println("");
    }
    public static void main(String args[]) {
        new NachrichtenCenterDemo().setVisible(true);
    }
    private JPanel uebersicht;
    private JToggleButton btUebersicht;
    private JToolBar toolbar;
}
```


----------



## orbi (23. Jun 2006)

Danke dir (mal wieder)
So was ähnliches habe ich mir schon gedacht, habs aber nicht wirklich zum laufen gebracht 
Ich werde das ganze mal in die Ap reinbasteln und schaun das das ding endlich funktioniert.  

Gruß
Robin


----------

