Checkbox in Dialog Dynamisch erstellen

Dieses Thema: "Checkbox in Dialog Dynamisch erstellen" im Forum "Java/Mono/dotGNU" wurde erstellt von lutoma, 08.02.2009.

  1. lutoma

    lutoma Möchtegern-Informatiker

    Dabei seit:
    28.01.2009
    Beiträge:
    57
    Zustimmungen:
    0
    Ort:
    Mannheim
    Huhu,
    für ein kleines Update-System soll der User in einem Dialog per Checkbox auswählen können, was installiert werden soll... Die Checkbox-Sache an sich geht auch, das hab ich momentan so:
    Code:
    JCheckBox[] rdl = { new JCheckBox("update1."),new JCheckBox("update.") };
    rdl = new JCheckBox[] { new JCheckBox("In Zukunft nicht mehr fragen.") };
    Object[] message = new Object[updates];
    message[0] = "Es wurden " + updates + " Updates gefunden.\nWelche sollen Installiert werden?";
    message[1] = rdl[0];
    message[2] = rdl[1];
    Das ganze soll jetzt nurnoch dynamisch sein...
    Die zuweisungen bei message[1] = rdl[0] usw. sind kein problem, das kann ich einfach per while-schleife machen. Was mir eher Kopfzerbrechen bereitet ist die Sache, wie ich die Checkboxen an sich erstellen soll.... Wenn ich das ganze so versuche:
    Code:
    JCheckBox[] rdl = { };
    i=-1;
    while(i < updates){
    i++;
    rdl[i] = new JCheckBox("update1");
    }
    Object[] message = new Object[updates];
    message[0] = "Es wurden " + updates + " Updates gefunden.\nWelche sollen installiert werden?";
    i=-1;
    while(i < updates){
    i++;
    message[i+1] = rdl[i];
    }
    kompiliert er mir das zwar, aber beim ausführen krieg ich diesen fehler:
    Code:
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
    	at start.checkForUpdates(start.java:358)
    	at start.access$0(start.java:301)
    	at start$1.actionPerformed(start.java:460)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
    	at java.awt.Component.processMouseEvent(Component.java:6108)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3276)
    	at java.awt.Component.processEvent(Component.java:5873)
    	at java.awt.Container.processEvent(Container.java:2105)
    	at java.awt.Component.dispatchEventImpl(Component.java:4469)
    	at java.awt.Container.dispatchEventImpl(Container.java:2163)
    	at java.awt.Component.dispatchEvent(Component.java:4295)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
    	at java.awt.Container.dispatchEventImpl(Container.java:2149)
    	at java.awt.Window.dispatchEventImpl(Window.java:2478)
    	at java.awt.Component.dispatchEvent(Component.java:4295)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
    
    Ich hoffe jemand kann mir helfen ?(
    Danke im Voraus, Lutoma
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 SkydiverBS, 08.02.2009
    Zuletzt bearbeitet: 08.02.2009
    SkydiverBS

    SkydiverBS Tripel-As

    Dabei seit:
    15.01.2005
    Beiträge:
    207
    Zustimmungen:
    0
    Ort:
    Freising
    Servus!

    Zunächst solltest du das rdl-Array genauso erzeugen, wie das message-Array. Mit deinem jetzigen Code erzeugst du ein leeres Array, was unweigerlich zu einer ArrayIndexOutOfBoundsException führt, wenn du auf irgendeinen Array-Index zugreifst. Weiterhin muss das message-Array ein Element mehr aufnehmen können, also musst du es mit
    Code:
    new Object[updates + 1]
    initialisieren.

    Außerdem finde ich deine Schleifen-Konstruktion etwas merkwürdig. Ich nehme mal an, dass die while-Schleifen pro Update nur einmal durchlaufen werden sollen, richtig? Da du i aber mit -1 initialisierst und direkt am Anfang erhöhst, wird die Schleife einmal mehr durchlaufen. Besser wäre meiner Ansicht nach:
    Code:
    i=0;
    while(i < updates){
    // do something
    i++;
    }
    
    oder du verwendest gleich eine for-Schleife.

    Ich hoffe meine Vorschläge bringen dich weiter!

    Gruß,
    Philip
     
  4. #3 lutoma, 09.02.2009
    Zuletzt bearbeitet: 09.02.2009
    lutoma

    lutoma Möchtegern-Informatiker

    Dabei seit:
    28.01.2009
    Beiträge:
    57
    Zustimmungen:
    0
    Ort:
    Mannheim
    Hey Danke, das funktioniert perfekt.

    Du hast meinen Tag gerettet :D
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Soo, jetzt hab ich aber noch ein Problem: Dadurch dass das Array jetzt ein Object ist kann ich kein isSelected mehr dazutun (Listerner gehn auch nicht)... Aber irgendwie muss ich ja erkennen können welche checkboxen selektiert sind...
     
  5. #4 SkydiverBS, 10.02.2009
    SkydiverBS

    SkydiverBS Tripel-As

    Dabei seit:
    15.01.2005
    Beiträge:
    207
    Zustimmungen:
    0
    Ort:
    Freising
    Gern geschehen :) !

    Natürlich, du musst nur das Object zu einer JCheckBox casten:
    Code:
    JCheckBox checkbox = (JCheckBox) message[1];
    checkbox.isSelected();
    Das sollte funktionieren. Natürlich musst du dazu wissen das hinter dem Object message[n] auch ein JCheckBox steckt, weil du sonst einen Fehler bekommst. Bei deinem Code auf Anhieb nicht ganz trivial, da z.B. message[0] ein String ist.

    Allerdings kannst du die Nachricht in message[0] in eine eigene Variable packen, dann könntest du ein reines JCheckBox-Array erzeugen, musst nicht mehr casten (was unschön ist) und würdest dir eine while-Schleife sparen. Mal als Vorschlag:
    Code:
    String message = "Es wurden " + updates + " Updates gefunden.\nWelche sollen installiert werden?";
    JCheckBox[] rdl = new JCheckBox[updates];
    for (int i = 0; i < updates; i++) {
    	rdl[i] = new JCheckBox("update" + (i + 1));
    }
    
    Kommt halt darauf an wie du das Array danach weiterverarbeitest.

    Gruß,
    Philip
     
Thema:

Checkbox in Dialog Dynamisch erstellen

Die Seite wird geladen...

Checkbox in Dialog Dynamisch erstellen - Ähnliche Themen

  1. dialog & --checkbox

    dialog & --checkbox: Hi Zusammen, möchte per dialog eine Checkbox zur Verfügung stellen. dialog --title "Kennwort zurücksetzten" --separate-output --checklist...
  2. Python checkbox in der Kommandozeile

    Python checkbox in der Kommandozeile: Guten Abend, Ich hoffe ihr hattet schöne Weihnachtstage ?! Nun ja nichts desto trotz habe ich ein oder im Verlauf mehrere Fragen :-) Einleitung:...
  3. Website Textfeld aktivieren wenn Checkbox aktiviert wird

    Website Textfeld aktivieren wenn Checkbox aktiviert wird: Hi, ich habe hier eine Liste von Checkboxen, die dynamisch anhand einer Datenbankabfrage erstellt wird. zu jeder Checkbox gehört ein Textfeld....
  4. [PHP] Checkboxen-Auswahl + dazugehörige Werte in Array

    [PHP] Checkboxen-Auswahl + dazugehörige Werte in Array: Hi, ich habe mit checkboxen eine Liste erstellt, aus der verschiedene Gegenstände durch Haken setzen markiert werden können. Über einen...
  5. PHP: Formular auf Checkbox prüfen und Formular-Daten an anderes Script übergeben

    PHP: Formular auf Checkbox prüfen und Formular-Daten an anderes Script übergeben: Hallo zusammen, ich stehe vor einem Verständnisproblem. Ich habe ein Script "A" indem ein Formular enthalten ist. In dem Formular soll der User...