Input/Output If-Statement wird übersprugen

Kenta1561

Bekanntes Mitglied
Hallo,

ich habe Folgendes geschrieben:
Java:
package main;

import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class Main {

    static String result;

    public static void main(String[] args) {

        JFrame frame = new JFrame("Title");
        frame.setSize(500,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();

        String[] language = {"Java", "JavaScript", "C++", "PHP", "HTML"};

        JComboBox jcb1 = new JComboBox(language);
        panel.add(jcb1);
        frame.add(panel);

        frame.setVisible(true);

        jcb1.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if(jcb1.getSelectedItem().equals("Java")) {
                    result = "Du hast Java ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("JavaScript")) {
                    result = "Du hast JavaScript ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("C++")) {
                    result = "Du hast C++ ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("PHP")) {
                    result = "Du hast PHP ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("HTML")) {
                    result = "Du hast HTML ausgewaehlt.";
                } else {
                    System.exit(1);
                }
            }
        });

        System.out.println(result);

    }
}

Ich will, dass der String "result" erst dann ausgegeben wird, wenn result auch durch das If-Statement gesetzt wird, jedoch scheint es so, als ob mein If-Statement übersprugen wird, weil in der Konsole "null" rauskommt. Wie kann ich mein Code so ändern, dass erst ein Text ausgegeben wird, wenn "result" auch gesetzt wurde?
 
Dein System.out.println(result) wird nachdem der ItemListener gesetzt wurde aufgerufen. Der ItemListener jedoch (und alles da drin), wird aber erst dann "gefeuert", wenn du etwas in der ComboBox wechselst. Und das passiert nicht beim Initialisieren.

Mach's so:
Java:
package main;

import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

public class Main {

    static String result;

    public static void main(String[] args) {

        JFrame frame = new JFrame("Title");
        frame.setSize(500,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();

        String[] language = {"Java", "JavaScript", "C++", "PHP", "HTML"};

        JComboBox jcb1 = new JComboBox(language);
        panel.add(jcb1);
        frame.add(panel);

        frame.setVisible(true);

        jcb1.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if(jcb1.getSelectedItem().equals("Java")) {
                    result = "Du hast Java ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("JavaScript")) {
                    result = "Du hast JavaScript ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("C++")) {
                    result = "Du hast C++ ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("PHP")) {
                    result = "Du hast PHP ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("HTML")) {
                    result = "Du hast HTML ausgewaehlt.";
                } else {
                    System.exit(1);
                }
                System.out.println(result);
            }
        });
    }
}

Ich würde deinen ItemListener mal sehr stark abkürzen, als Hinweis 🙂
Java:
jcb1.addItemListener(e -> {
            System.out.println("Du hast " + jcb1.getSelectedItem().toString() + " ausgewaehlt.");
        });
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Antwort, was soll ich aber machen, wenn ich das über zwei Klassen machen will?:

Main-Klasse:
Java:
package main;

public class Main {

    public static void main(String[] args) {

        GUI gui = new GUI();
        String receivedResult = gui.connect();

        System.out.println(receivedResult);

    }

}

Zweite Klasse:
Java:
package main;

import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

/**
* Created by Kenta1561 on 2016/05/13.
*/
public class GUI {

    String result;

    public String connect() {

        JFrame frame = new JFrame("Title");
        frame.setSize(500,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();

        String[] language = {"Java", "JavaScript", "C++", "PHP", "HTML"};

        JComboBox jcb1 = new JComboBox(language);
        panel.add(jcb1);
        frame.add(panel);

        frame.setVisible(true);

        jcb1.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if(jcb1.getSelectedItem().equals("Java")) {
                    result = "Du hast Java ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("JavaScript")) {
                    result = "Du hast JavaScript ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("C++")) {
                    result = "Du hast C++ ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("PHP")) {
                    result = "Du hast PHP ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("HTML")) {
                    result = "Du hast HTML ausgewaehlt.";
                } else {
                    System.exit(1);
                }

            }
        });

        return result;

    }
}

Hier weiß ich jetzt nicht, wie ich "result" erst zurückgeben kann, nachdem ich sich die Variable geändert hat, denn ich muss ja return ja da schreiben, nicht irgendwo anders.
Wie mache ich das?

MfG
Kenta1561
 
Danke für die Antwort, was soll ich aber machen, wenn ich das über zwei Klassen machen will?:

Main-Klasse:
Java:
package main;

public class Main {

    public static void main(String[] args) {

        GUI gui = new GUI();
        String receivedResult = gui.connect();

        System.out.println(receivedResult);

    }

}

Zweite Klasse:
Java:
package main;

import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

/**
* Created by Kenta1561 on 2016/05/13.
*/
public class GUI {

    String result;

    public String connect() {

        JFrame frame = new JFrame("Title");
        frame.setSize(500,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();

        String[] language = {"Java", "JavaScript", "C++", "PHP", "HTML"};

        JComboBox jcb1 = new JComboBox(language);
        panel.add(jcb1);
        frame.add(panel);

        frame.setVisible(true);

        jcb1.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                if(jcb1.getSelectedItem().equals("Java")) {
                    result = "Du hast Java ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("JavaScript")) {
                    result = "Du hast JavaScript ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("C++")) {
                    result = "Du hast C++ ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("PHP")) {
                    result = "Du hast PHP ausgewaehlt.";
                } else if(jcb1.getSelectedItem().equals("HTML")) {
                    result = "Du hast HTML ausgewaehlt.";
                } else {
                    System.exit(1);
                }

            }
        });

        return result;

    }
}

Hier weiß ich jetzt nicht, wie ich "result" erst zurückgeben kann, nachdem ich sich die Variable geändert hat, denn ich muss ja return ja da schreiben, nicht irgendwo anders.
Wie mache ich das?

MfG
Kenta1561
Callback. Keine Ahnung, mach sowas sehr selten.
 

Neue Themen


Zurück
Oben