Checkbox in Dialog Dynamisch erstellen

Dieses Thema 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
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
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...