GUI - ActionListener

Liondary

Mitglied
Hey, ich arbeite grade zum ersten mal mit einem GUI. Als LayoutManager habe ich MigLayout gewählt. Mein Ziel ist es, dass wenn ich in der JComboBox zum Beispiel Mensch auswähle, eine Instanz der Klasse Mensch erzeugt wird und auf dem Panel, welches sich auf dem Frame befindet dann auch die Nachricht aufplopt "Mensch erzeugt". Leider funktioniert das nicht... Kann mir jemand sagen wieso?

Vielen Dank schon mal!

Java:
import javax.swing.*;
import java.awt.event.*;

public class App {
    public static void main (String[] args) {      
        SwingUtilities.invokeLater(new Runnable() { // Erstellt einen (Swing)Thread
          
            public void run() {              
                JFrame frame = new MainFrame( "Frame"); //Erzeugt Instanz von MainFrame und ruft Konstruktor auf
              
                //Frame Eigenschaften
                frame.setVisible(true);
                frame.setSize( 350, 500 );
                frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );              
            }
        });      
    }
}

Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.*;
import javax.swing.border.EmptyBorder;

import net.miginfocom.swing.MigLayout;

@SuppressWarnings("serial")
public class MainFrame extends JFrame implements ActionListener {
  
    public MainFrame(String title) {
        super(title); // Ruft den Konstruktor der Superklasse (in diesem Fall Frame) auf und übergibt den Titel
      
        String objekt;
        String[] list = {"-","Lebewesen", "Mensch", "Superheld"};
        JPanel c = new JPanel();
      
        this.getContentPane().add(c);
        c.setLayout(new MigLayout("", "[]", "[] [] [] []"));
      
        JLabel begruessung = new JLabel("Hallo, was möchten Sie erzeugen?");
      
        @SuppressWarnings({ "rawtypes" })
        JComboBox liste = new JComboBox(list);
        liste.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                String s = (String) liste.getSelectedItem();

                switch (s) {
                    case "-":
                        JLabel nichts = new JLabel("-");
                        c.add(nichts, "cell 0 1");
                        System.out.println("-");
                        break;
                    case "Lebewesen":
                        Lebewesen lebewesen1 = new Lebewesen();
                        JLabel lebewesen = new JLabel("Lebewesen erzeugt");
                        c.add(lebewesen, "cell 0 1");
                        System.out.println("Lebewesen");
                        break;
                    case "Mensch":
                        Mensch mensch1 = new Mensch();
                        JLabel mensch = new JLabel("Mensch erzeugt");
                        c.add(mensch, "cell 0 1");
                        System.out.println("Mensch");
                        break;
                    case "Superheld":
                        Superheld superheld1 = new Superheld();
                        JLabel superheld = new JLabel("Superheld erzeugt");
                        c.add(superheld, "cell 0 1");
                        System.out.println("Superheld");
                        break;
                }
            }
        });
      
        c.add(begruessung, "cell 0 0");
        c.add(liste, "cell 0 1");
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub      
    }
}

Java:
public class Lebewesen {
  
    protected boolean lebt;

    public Lebewesen() {      
    }
  
    public void atmen() {      
        lebt = true;
    }
  
    public void sterben () {      
        lebt = false;
    }
}

Java:
public class Mensch extends Lebewesen {
  
    protected String hautfarbe;
    protected boolean sauberkeit;
  
    public Mensch() {
        hautfarbe = "unbekannt";
        sauberkeit = false;
    }
  
    public void setHautfarbe(String _hautfarbe) {      
        hautfarbe = _hautfarbe;      
    }
  
    public String getHautarbe() {      
        return hautfarbe;
    }
  
    public void waschen() {      
        sauberkeit = true;
    }
  
    public void schwitzen() {  
        sauberkeit = false;
    }
  
    public boolean getSauberkeit() {      
        return sauberkeit;
    }
}
 
Zuletzt bearbeitet von einem Moderator:
@VfL_Freak
Also wenn ich starte wird das Label mit "Was soll erzeugt werden" und die ComboBox mit den Auswahlmöglichkeiten angezeigt. Wenn man jetzt zum Beispiel Mensch auswählt wird unten in der Console auch auch "Mensch" ausgegeben - bedeutet der ActionListener funktionert. Aber ich möchte ja das auch "Mensch erzeugt" als Label auf das Panel gebracht wird und genau das funktioniert eben nicht. Also das nachträgliche ergänzen eines JLabes auf das JPanel durch einen ActionListener. Hoffentlich war das jetzt klarer 🙂 Liebe Grüße
 
Moin,

Du meinst diese Zeile?
Java:
c.add(mensch, "cell 0 1");
habe schnell mal in die API geschaut und für JPannel keine add-Methode gefunden, die Parameter sowas wie (Object, String) oder (Component, String) akzeptiert!
Was soll die denn Deiner Meinung nach machen ??
Gruß Klaus
 
In der Zeile:
Java:
c.add(begruessung, "cell 0 0");
c.add(liste, "cell 0 1");

Funktioniert das ganze ja...

Das ist Teil des MigLayouts (nicht in der Standart Bibliothek), bei diesem Layout wird das Frame in Spalten und Zeilen aufgeteilt und der String "cell 0 1" gibt an das das Label in der 0 Spalte, in der ersten Zeile positioniert werden soll.

Hier mehr Infos zum MigLayout: http://www.miglayout.com/QuickStart.pdf
 

Neue Themen


Zurück
Oben