Problem mit if-Anweisung

Status
Nicht offen für weitere Antworten.

maracuja05

Mitglied
Hallo,
ich schreibe ein Programm mit Java Swing, aber momentan habe ich ein eher allgemeines Java Problem =(
ich hoffe mir kann jemand helfen...

ich selektiere ein Element einer JList:
int auswahl1 = jlist1.getSelectedIndex();
und beginne dann mit
if(auswahl1 == 0) {....}
if(auswahl1 == 1) {....}
und so weiter eine andere Liste darzustellen. Kann man sich in etwa wie ein Baum vorstellen.

In der ersten ebene funtioniert das auch noch, wenn ich aber in if(auswahl == 1) bin und dort eine neue Liste dargestellt habe die ich mit einer neuen Auswahlvariable auswahl2 wieder ändern möchte, dann greift mein programm immer wieder auf die erste variable auswahl1 zu, obwohl ich in der schleife bin =(
kann mir jemand sagen, wie ich das verhindern kann und das programm im zwieten schritt auswahl2 als die variable nutzt ????


Code:
jlist1.addListSelectionListener(new ListSelectionListener() 
    { 
        public void valueChanged(ListSelectionEvent e ) 
        { 
					  
            int auswahl1 = jlist1.getSelectedIndex(); 
            System.out.println("auswahl1: " + auswahl1); 
              
            if(auswahl1 == 0){ 
                Liste liste2 = new Liste();
                //hier wird nur in einer anderen Liste jlist2 etwas verändert
                jlist2.setModel(liste2.getListSysAntEZsteps().getModel()); 
                
            }                     
            if(auswahl1 == 1){
                Liste liste = new Liste();
                //hier wird in der selben JList eine andere Liste aufgerufen - funtioniert!!!
                jlist1.setModel(liste.getListRundUmTanz().getModel());	
						
                //neue AuswahlVariable					
                int auswahl2 = jlist1.getSelectedIndex();
                System.out.println("auswahl2:" + auswahl2);
	
                if(auswahl2 == 0){
                    Liste liste2 = new Liste();
                    //hier funktioniert's nicht mehr.. =(  
                       in jlist1 wird dann das angezeigt was mit auswahl1 == 0 bestimmt wurde
                        
                    jlist1.setModel(liste2.getListStart().getModel());
                    jlist2.setModel(liste2.getListStart().getModel());	
                }
                if(auswahl2 == 1){
                    ....
                }
                if(auswahl2 == 2){
                    ....
                }
                if(auswahl2 == 3){
                    ....
                }
                if(auswahl1 == 2){
                    ....
                }
        }					  
 });

Vielen Dank.
MfG Mara
 

Karl

Aktives Mitglied
Hallo,

:shock: Es gibt keine if-Schleifen! :meld:

Also aus Deinen Angaben werde ich nicht ganz schlau. Hast Du den Code mal Schritt für
Schritt gedebuggt? Du hast einen ListSelectionListener auf jlist1 angemeldet und tauscht
in der valueChanged-Methode das Model aus - das riecht nach Ärger, da sich dadurch eigentlich
wieder ein valueChanged ergeben müsste.

Kannst Du vielleicht kurz erklären, was Du vorhast? Abhängige Listen oder Listen austauschen?

Gruß,
Karl
 

maracuja05

Mitglied
hmm, ich tausche das model aus?? weiß nciht wirklich was du meinst.
ich hab zwei JLIsts: jlist1 und jlist2...
in einer anderen klasse baue ich mir listen zusammen, die ich dann in den JLists aufrufen will... das klappt auch soweit alles =)
in jlist1 steht jetzt eine liste aus meiner listen-klasse, das selektierte element soll wieder in jlist1 eine andere liste aufrufen...
alte weg und neue hin. klappt auch noch.
jetzt will ich allerdings das selbe in der neuen liste machen. element selektieren und neue liste anzeigen.. hier klappts nicht mehr.
dachte es mit einer neuen variable auswahl2 steuer zu können, aber die wird überhaupt nicht angesprochen.. es wird immer nur auswahl1 ausgegeben =((
da liegt mein problem...

war das besser verständlich ???
 

Karl

Aktives Mitglied
Hallo,


Fall0: erstes Element (0) in jlist1 wird selektiert:
Modell der zweiten Liste wird ausgetauscht, dort nichts selektiert.

Fall1: zweites Element (1) wird in jlist1 selektiert:
Die Zeile

Code:
jlist1.setModel(liste.getListRundUmTanz().getModel());

setzt das Model der Liste1. Damit ändert sich auch die Selektion, genauer gesagt, wird die Selektion
aufgehoben. Das bewirkt ein erneutes valueChanged-Event, weil der Listener angemeldet bleibt.
Allerdings wird das Event erst verarbeitet, wenn die Methode durchlaufen worden ist.

Danach weist Du mit
Code:
int auswahl2 = jlist1.getSelectedIndex();
                System.out.println("auswahl2:" + auswahl2);

der Variablen auswahl2 den Index des in der Liste selektierten Elements zu, das müsste
jetzt eigentlich -1 sein.
Damit müsste jlist2 unverändert bleiben.


Was in den anderen Fällen passiert, ist nicht ersichtlich.
Ich verstehe einfach nicht, warum Du den Inhalt von jlist1 veränderst.
Bei abhängigen Listen ist es doch eigentlich immer so, dass man die
zweite Liste abhängig vom selektierten Eintrag der ersten Liste füllt.

Wenn Du etwas zur Fachlichkeit hinter Deinem Vorgehen sagst, kann man Dir
vielleicht eher helfen.

Gruß,
Karl
 

maracuja05

Mitglied
hallo,
ich versuche nochmal mein problem in worte zu fassen.
jlist2 ist für dieses problem völlig irrelavant, kann also außer acht gelassen werden...

zunächst übergebe ich per buttondruck eine liste vom typ JList aus einer klasse liste in meine jlist1.
mit
Code:
 int auswahl1 = jlist1.getSelectedIndex();
registriere ich, welches listenelement gewählt wurde... je nach listenelement soll wieder in jlist1 eine völlig neue liste angezeigt werden. wieder vom typ liste gespeichert in meiner klasse liste.
dies habe ich realisiert, in dem ich mit der if-anweisung das entsprechende vom user selektierte element erkenne und eine andere liste in meiner jlist1 anzeige.
Code:
if(auswahl1 == 1){ 
                Liste liste = new Liste(); 
                //hier wird in der selben JList eine andere Liste aufgerufen - funtioniert!!! 
                jlist1.setModel(liste.getListRundUmTanz().getModel());

das klappt =)

jetzt bin ich allerdings auf der zweiten ebene, denn hier geht das ganze von vorne los.. ich habe ja wieder eine liste mit mehreren elementen, bei deren auswahl ich jeweils wieder eine andere liste aus der klasse liste ausrufen und anzeigen lassen will.

hier habe ich gedacht, könnte ich einfach ein neue variable, nämlich auswahl2 definieren, die das neue selaktierte element speichert. nur leider klappt das nicht.
sobald ich in der neuen liste ein element auswähle wird meine erste variable auswahl1 angesprochen und dementsprechend auch das getan, was in den if-anweisungen zu auswahl1 steht. wie bekomme ich jetzt also hin, dass mein programm, die auswahl2 erkennt.... also immer wieder die alten listen in meiner jlist1 durch neue listen ersetzen kann. das muss doch gehn.. =(

würde mich wirklich sehr über hilfe freuen..
bin am verzweifeln.
vielen dank. lg mara
 

Karl

Aktives Mitglied
Hallo,

hmm, richtig verstanden habe ich es zwar noch nicht, aber soweit so gut.

Du möchtest ein List-Control bauen, das seinen eigenen Inhalt bei Selektion eines Listenelements
gegen eine neue Liste austauscht? - ???:L

Also wie bereits oben erwähnt, wird durch ein setModel() die Selektion aufgehoben, daher dürfte
der Code

Code:
                //neue AuswahlVariable                
                int auswahl2 = jlist1.getSelectedIndex();

immer -1 liefern, was bewirkt, dass keine Deiner Bedingungen für auswahl2 darunter jemals erfüllt wird.

Die Methode valueChanged() wird dann ein zweites Mal durchlaufen (mit auswahl1 = jlist1.getSelectedIndex() == -1), was keine Wirkung hat, weil Du -1 nicht behandeltst.
Danach müsste die Liste jlist1 mit dem Inhalt aus "liste.getListRundUmTanz().getModel()" zu sehen sein, ohne das
etwas selektiert ist.

Richtig?

Wenn Du dort nun einen Listeneintrag anklickst, wird wieder ein valueChanged-Event ausgelöst, und Du landest
wieder in der Methode. Klickst Du den ersten Eintrag (0) an, wird die zweite Liste beeinflusst. Klickst Du den zweiten
Eintrag (1) an, verschwindet nur die Selektion in jlist1. Richtig?

Meiner Ansicht nach müsstest Du statt der Schachtelung (auswahl2 innerhalb von auswahl1==1) auf einer Ebene
bleiben. So richtig klar ist mir Dein Ziel aber noch nicht.

Gruß,
Karl
 

maracuja05

Mitglied
hallo,
vielen dank für deine hilfe.. leider bin ich immer noch nicht weitergekommen mit meinem problem.
interessant ist, dass mit setModel() die selektion aufgehoben wird. und es iszt richtig, dass auswahl2 niemals behandelt wird - leider =(

ich versuche dir mein ziel nochmal mit einem einfachen beispiel zu erklären, so kompliziert ist es nämlich gar nicht.
meine erste liste, die ich auf buttondruck in jlist1 anzeigen will sei z.b. (montag, dienstag, mittwoch, donnerstag, freitag).
durch auswahl eines elements will ich ebenfalls in jlist1 eine neue liste anzeigen lassen. z.b. bei montag (auswahl1 == 0) neue liste (morgens, mittags, abends, nachts), bei dienstag (auswahl1 == 1) z.b. die liste (fleisch, fisch, kartoffel, reis)..
habe ich jetzt also die neue liste (fleisch, fisch, kartoffel, reis) in meiner jlist1 möchte ich auch hier wieder ein element selektieren können (dachte dies mit auswahl2 machen zu können, funzt aber wie gesagt nicht), z.b. kartoffel (auswahl == 2) liefert mir die liste (hallo, hey, hi, ..)...

die inhalte ergeben keinen sinn, aber mir ist gerade nichts besseres eingefallen.

ist dir mein ziel jetzt klarer ??
auf einer ebene kann ich dass ganz nicht machen, weil z.b. bei auswahl == 1 je nach aufgerufener liste eine ANDERE neue liste in meiner jlist1 angezeigt werden soll...

vielen dank.
lg mara
 

Karl

Aktives Mitglied
Hallo,

ja, jetzt sehe ich, wo Du hin willst, auch wenn mir dieses Listcontrol nicht gefallen würde :?

Das Problem ist, dass Du Dir merken musst, was denn gerade angezeigt wird (also welche
Liste hinter jlist1 ist).
Momentan prüfst Du nur die Position, die in jlist1 selektiert ist und verwendest die als
Kriterium. Tatsächlich müsstest Du aber auch als Bedingung die Information nehmen,
welche Liste gerade aktiv ist.

Hier mal prinzipiell für Dein letztes (anschauliches :lol: ) Beispiel skizziert:

Code:
    int auswahl1 = jlist1.getSelectedIndex(); 

    //abhängig davon, welches Model aktiv ist, auf Selektion reagieren, sei activeModel eine Hilfsvariable
    if (activeModel == WOCHENTAGE) {
            System.out.println("auswahl1: " + auswahl1); 
              
            if(auswahl1 == 0){ 
                [...]                
            }        
            if(auswahl1 == 1){  
                  jlist1.setModel(getZeitenListe());
                  activeModel = ZEITEN;          
            }        
    }
    else if (activeModel == ZEITEN) {
            System.out.println("auswahl1: " + auswahl1); 
              
            if(auswahl1 == 0){ 
                [...]                
            }        
            if(auswahl1 == 1){  
                  jlist1.setModel(getEssenListe());
                  activeModel = ESSEN      
            }        
    }
    else if (activeModel == ESSEN) {
            if(auswahl1 == 2){  
                  jlist1.setModel(getAnredeListe());
                  activeModel = ANREDEN;          
            }        
    }
              
[...]

Naja, wenn Du das zum Laufen gebracht hast, kannst Du ja nochmal überlegen,
wie Du den Code verbesserst, oder ob der Ansatz mit der sich selbst ändernden Liste
so gut ist. In jedem Fall baust Du da ein Control, was den Anwender in Erstaunen versetzen
dürfte - und das ist immer schlecht ...

Gruß,
Karl
 

maracuja05

Mitglied
hmm, das sieht doch mal gar nicht schlecht aus... die idee find ich toll und werde das mal probieren.. =)
vielen dank für deine mühe.
wie gebe ich denn meinen listen namen ?? hier WOCHENTAGE, ZEITEN, etc.. oder sind das einfach die namen, die ich in der klasse liste meinen listen schon gegeben hab...
und mit deiner letzten bemerkung hast du mich noch restlos verwirrt. was ist denn ein control. und wirklich überdenken kann ich das auch nicht, so sieht der plan aus.. das in jlist1 immer neue listen angezeigt werden. verstehe nicht wirklich, was daran so verwerflich sein soll =))
 

Karl

Aktives Mitglied
Hallo,

wie gebe ich denn meinen listen namen ??

Das war nur ein wenig Pseudocode. Denkbar ist, dass Du in Deiner Klasse eine Variable vom
Typ int deklariert und ein Paar Konstanten.
Code:
    public static final int NO_MODEL = -1;
    public static final int WOCHENTAGE = 0;
    public static final int ZEITEN = 1;
    public static final int ESSEN = 7;

    private int activeModel = NO_MODEL;

    [...]

Als Control (zu Deutsch "Bedienelement") bezeichnet man so ein typisches Element auf einem Dialog zur
Benutzerinteraktion, z.B. ein Button oder ein Textfeld. Controls können aber auch zusammengesetzt sein aus
anderen Controls. In Deinem Fall meinte ich die von Dir bereitgestellte Form einer Auswahlliste.

Es ist grundsätzlich verwerflich, den Anwender bei der Bedienung der Software in Erstaunen zu versetzen.
Allerdings bist Du da nicht alleine. Erst neulich habe ich ein Programm gesehen, bei dem der Schließenbutton
rechts unten war und nur beim "Drüberhovern" überhaupt richtig erkennbar. Sowas ist eigentlich immer Mist.
Eine Ausnahme bilden Programme im Multimedia- oder Spielebereich, bei denen die Kreativität
wesentlich wichtiger ist als die Bedienbarkeit.
In Deinem konkreten Fall wollte ich einfach nur darauf hinweisen, dass eine solche sich auf
pure Selektion hin ändernde Liste absolut ungewöhnlich ist. Ich habe sowas noch nie gesehen.
man denke nur an die armen Tastaturbenutzer - wie sollen die jemals was anderes als Montag selektieren?

Es spricht nichts dagegen, den Inhalt einer Liste gegen einen neuen Auszutauschen.
Ein Beispiel ist die rechte Seite des Windows-Explorers.
Allerdings gibt es da einen entscheidenden Unterschied - es wird (Standard) auf einen Doppelklick
oder zumindest auf einen gezielten Klick reagiert, nicht auf die pure Selektion hin.

Schau Dir am Besten mal die anderen Listener an, die Du anmelden kannst.

Gruß,
Karl
 

maracuja05

Mitglied
ach, jetzt habe ich verstanden was du meinst..
zum glück =)

ich denke wir bleiben kreativ und der user wird schon kapieren, dass er durch selektion (bzw. durch einen klick) weiter kommt.. die elemente der listen sind auch als fragen formuliert, insonfern kann man da nix falsch machen und klickt automatisch auf das element, um die antwort zu bekommen.. die gibts dann auch in einer neuen jlist (nämlich jlist2) und zusätzlich gibt in jlist1 ein neues fragenpaket...
ähnlich wie bei monkeyisland =)))

für das problem mit den listennamen habe ich auch schon eine idee.. bin jetzt ganz zuversichtlich, dass es funktionieren wird...

nochmal vielen lieben dank für deine mühe..
lg mara
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Else-Anweisung Problem Allgemeine Java-Themen 17
S Problem mit if-Anweisung Allgemeine Java-Themen 6
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben