Musik Sammlung

bene98

Aktives Mitglied
Hallo ich mach gerade ein Projekt, in dem ich versuche eine Musiksammlung zu simulieren.
In der Konsole hat es funktioniert. Ich versuche nun gerade eine GUI zu bauen.
Ich hab extra JCheckboxen gewählt und keine Buttons, weil ich mir dachte, dass es leichter würde, mehrere in einer Klasse zu haben und auszuwerten.
Vielleicht fehlt mir dafür noch ein button. Ich dachte es mir so, dass nach Druck auf einen Knopf festgestellt wird, welche der Aktionen ausgeführt werdensoll. Man müsste feststellen, welches angeklickt wurde und die entsprechende aktion ausführen anstelle der zahlen in dem switch/case für die Konsole. Nur leider krieg ich die sache mit den ItemStateChanged nicht auf die reihe. könnte mir vlt jemans sagen,
wie die methode aussehen müsste, damit etwas passoiert nach dem Anklicken des Feldes.
Vielen Dank
Java:
package bank;


import java.awt.*;
import java.awt.Color;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;



public class CDTest2  implements ItemListener {
    static ArrayList<CD> CDDatenbank = new ArrayList<CD>();
    JCheckBox checkAlbum;
    JCheckBox checkEnde;
    boolean running;
    String jaOderNein;
    Image aktBild;
    JFrame neuerFrame;
    Label CDGold;
    JTextField neuerTitel;
    JTextField alterTitel;
    

public static void main (String[]args) {
    CDTest2 CDTest3 = new CDTest2();
    CDTest3.run();
    
    
    
}
    
    
    public void run() {
    running=true;
    
    CD cd1984 = new CD("Bochum","Groenemeyer","Deutschpop", 12);
    CD cdblur = new CD("blur", "blur", "Britpop", 10);
    CD cdshakira = new CD("Waka Waka", "Shakira", "Pop", 5);
    CD cdPur = new CD("Abenteuerland", "Die Prinzen", "Deutschpop", 3);
    CD cdauswaerts = new CD ("Auswärtsspiel", "Tote Hosen", "Deutschrock", 10);       
    CDDatenbank.add(cdshakira);
    CDDatenbank.add(cd1984);
    CDDatenbank.add(cdblur);
    CDDatenbank.add(cdauswaerts);
    CDDatenbank.add(cdPur);


JFrame neuerFrame= new JFrame();
neuerFrame.setSize(700, 700);
neuerFrame.setVisible(true);
neuerFrame.setLayout(new BorderLayout());
neuerFrame.setBackground(Color.WHITE);
JPanel CDPanel= new JPanel();

JTextField neuerTiteletc = new JTextField(10);
JTextField alterTiteletc = new JTextField(10);
CDPanel.add(alterTiteletc);
CDPanel.add(neuerTiteletc);
neuerFrame.getContentPane().add(BorderLayout.EAST,CDPanel);
neuerFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

CDPanel.setSize(100,100);
CDPanel.setBackground(Color.white);



JCheckBox checkAlbum= new JCheckBox ("Albumtitel ändern");
JCheckBox checkKuenstler= new JCheckBox("Interpret ändern");
JCheckBox checkGenre= new JCheckBox("Genre ändern");
JCheckBox checkPreis= new JCheckBox("Preis ändern");
JCheckBox checkEnde= new JCheckBox("Programm beenden");
checkEnde.addItemListener(this);
checkGenre.addItemListener(this);
checkAlbum.addItemListener(this);
checkKuenstler.addItemListener(this);
checkPreis.addItemListener(this);

JPanel Boxen = new JPanel();
neuerFrame.getContentPane().add(BorderLayout.NORTH,Boxen);
Boxen.setBackground(Color.darkGray);
Boxen.setVisible(true);

Boxen.add(checkAlbum);
Boxen.add(checkKuenstler);
Boxen.add(checkGenre);
Boxen.add(checkPreis);
Boxen.add(checkEnde);

JPanel Infopanel =new JPanel();
Infopanel.setSize(300,300);
Infopanel.setVisible(true);
neuerFrame.getContentPane().add(BorderLayout.WEST,Infopanel);
JTextArea Infoarea = new JTextArea(21,45);
Infoarea.setLineWrap(true);
Infopanel.add(Infoarea);

ImageIcon CDBild = new ImageIcon ("C:\\Users\\Benedikt\\Documents\\java\\CD.jpg");
JLabel CDGold = new JLabel(CDBild);
CDGold.setSize(300,300);
CDGold.setVisible(true);
neuerFrame.getContentPane().add(BorderLayout.SOUTH,CDGold);


    

while (running) {
        String aenderung="";   
        BufferedReader breader = new BufferedReader (new InputStreamReader(System.in));
        
            System.out.println("1=Albumtitel ändern"); System.out.println("2=Interpret ändern"); System.out.println("3=Genre ändern"); System.out.println("4=Preis ändern"); System.out.println("Bitte geben Sie die entsprechende Zahl hier ein:");
                
                    
        try {
            aenderung = breader.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        int i=0;
        switch (aenderung) {
        
        
        
        case("1"):
            System.out.print ("Geben Sie den Albumtitel ein, den Sie ändern ändern wollen:");
            String zuAenderungTitel ="";
            try {
                zuAenderungTitel = breader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            for (i=0; i<CDDatenbank.size(); i++) {
                if(CDDatenbank.get(i).titel.equals(zuAenderungTitel)) {
                    int Indexname= CDDatenbank.indexOf(CDDatenbank.get(i));
                    CD temp= CDDatenbank.get(Indexname);
                    
                    System.out.println("Bitte geben Sie den neuen Titel ein:");
                    String geanderterTitel;
                    try {
                        geanderterTitel = breader.readLine();
                        temp.titel= geanderterTitel;
                        CDDatenbank.set(Indexname, temp);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }}}
                    break;
        case ("2"):
                String zuAenderungInterpret= "";
                System.out.println("Geben Sie den Interpreten ein, den Sie ändern wollen:");
            try {
                    zuAenderungInterpret = breader.readLine();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                    
                    for (i=0; i<CDDatenbank.size(); i++) {
                    if(CDDatenbank.get(i).Interpret.equals(zuAenderungInterpret)) {
                    int Indexname2= CDDatenbank.indexOf(CDDatenbank.get(i));
                    CD temp2= CDDatenbank.get(Indexname2);
                    
                    System.out.println("Bitte geben Sie den neuen Interpreten ein:");
                    String geanderterInterpret;
                    try {
                        geanderterInterpret = breader.readLine();
                        temp2.Interpret= geanderterInterpret;
                        CDDatenbank.set(Indexname2,temp2);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }}}
                    break;
        case ("3"):
            String zuAenderungInterpretFuerGenre= "";
        System.out.println("Geben Sie den Interpreten ein, für den Sie das Genre ändern möchten:");
    try {
            zuAenderungInterpretFuerGenre = breader.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            
            for (i=0; i<CDDatenbank.size(); i++) {
            if(CDDatenbank.get(i).Interpret.equals(zuAenderungInterpretFuerGenre)) {
            int Indexname3= CDDatenbank.indexOf(CDDatenbank.get(i));
            CD temp3= CDDatenbank.get(Indexname3);
            
            System.out.println("Bitte geben Sie das neue Genre ein:");
            String geandertesGenre;
            try {
                geandertesGenre = breader.readLine();
                temp3.Genre= geandertesGenre;
                CDDatenbank.set(Indexname3,temp3);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }}}
            break;
        case ("4"):
            String zuAenderungInterpretfuerPreis= "";
            System.out.println("Geben Sie den Interpreten ein, für den Sie den Sie den Preis ändern wollen:");
        try {
                zuAenderungInterpretfuerPreis = breader.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
                
                for (i=0; i<CDDatenbank.size(); i++) {
                if(CDDatenbank.get(i).Interpret.equals(zuAenderungInterpretfuerPreis)) {
                int Indexname4= CDDatenbank.indexOf(CDDatenbank.get(i));
                CD temp4= CDDatenbank.get(Indexname4);
                
                System.out.println("Bitte geben Sie den neuen Preis ein:");
                String geanderterPreis;
                try {
                    geanderterPreis = breader.readLine();
                    Integer neuerPreis = Integer.parseInt(geanderterPreis);
                    temp4.Kaufpreis= neuerPreis;
                    CDDatenbank.set(Indexname4,temp4);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }}}
                break;   
                    
        }
            
        

        System.out.print("Titel");
        Infoarea.append (" - ");
        Infoarea.append("Titel");
        System.out.print(" - ");
        Infoarea.append(" - ");
        System.out.print("Interpret");
        Infoarea.append("Interpret");
        System.out.print(" - ");
        Infoarea.append(" -  ");
        System.out.print("Genre");
        Infoarea.append ("Genre");
        System.out.print(" - ");
        Infoarea.append(" - ");
        Infoarea.append ("Preis");
        Infoarea.append("\n");
        System.out.println("");
        Infoarea.append("\n");
        System.out.println("");
        Infoarea.append("");



        double summePreise = 0;
        String alleGenre="";
        String alleInterpreten="";
        String alleTitel="";
        for (int a=0; a<CDDatenbank.size();a++) {
            summePreise += CDDatenbank.get(a).Kaufpreis;
            alleGenre = CDDatenbank.get(a).Genre;
            alleTitel = CDDatenbank.get(a).titel;
            //System.out.print(summePreise);

            Infoarea.append (" - ");
            System.out.println ("-");
            Infoarea.append (CDDatenbank.get(a).titel);
            System.out.println(CDDatenbank.get(a).titel);
            Infoarea.append (" - ");
            System.out.println(" - ");
            Infoarea.append (CDDatenbank.get(a).Interpret);
            System.out.println(CDDatenbank.get(a).Interpret);
            Infoarea.append (" - ");
            System.out.println(" - ");
            
            Infoarea.append (CDDatenbank.get(a).Genre + "\n");
            
            System.out.println (CDDatenbank.get(a).Kaufpreis);
            
        }
        System.out.println("Summe der Preise: " +summePreise);   
}

} //run

    public void itemStateChanged(ItemEvent arg0) {
         if (checkEnde.isSelected())     
                System.out.println("Der Mann hört auf Golf zu fahren");
              }}
 

mihe7

Top Contributor
Prinzipiell willst Du ja eine Aktion ausführen, insofern bieten sich hier tatsächlich eher JButtons als JCheckBoxes an.

Dann hast Du verschiedene Aktionen: Albumtitel ändern, Interpret ändern, etc. Dem entsprechend bieten sich auch verschiedene ActionListener (bzw. ItemListener) an.

Wenn Du mal alle Deine Klassen postest (z. B. in einer ZIP-Datei), könnte man sich das mal am lebenden Objekt anschauen.
 

bene98

Aktives Mitglied
Danke,
Ich habe jetzt Button aus den Checkfeldern gemacht.
Es funktioniert auch, dass die verschiedenen Buttons Aktionen auszulösen (Zumindest was in der Konsole ausgeben)
Meine Frage:
 

bene98

Aktives Mitglied
ist es sinnvoll, dass in der Methode actionPerformed von den verschiedenen Buttons - Methoden aufgerufen werden.
Dann müsst ich die switch/case statements aus dem bisherigen Code in Methoden umschreiben. Das erscheint mir aber sinnvoller als das alles in der actionPerformed-Methode ausführen zu lassen.
 

bene98

Aktives Mitglied
Den Button anklicken. Der ruft actionPerformed auf. Hier wird der richtige Button zugeordet über getActionCommand.equals.
Hier dann z.B.: else if (event.getActionCommand().equals("Albumtitel ändern")) {entsprechende methode Albumtitel ändern aufrufen.}
Die Methoden müsste ich noch schreiben. würden sich aber größtenteils aus den switch/case statements 1-4 (s.Code oben) ergeben
 

bene98

Aktives Mitglied
ich bin halt weiter bei einem listener geblieben. ist das problematisch?
Andere Möglichkeit mit verschiedenen Listenern wäre über innere klassen?
 

mihe7

Top Contributor
ich bin halt weiter bei einem listener geblieben. ist das problematisch?
Im Prinzip schon, weil es dem objektorientierten Ansatz widerspricht.

Andere Möglichkeit mit verschiedenen Listenern wäre über innere klassen?
Ja oder mittels Lambdas bzw. Methodenreferenzen.

Zum Beispiel einmal mit Methodenreferenz und einmal mit einem Lambda-Ausdruck:
Java:
...
    btnAlbum.addActionListener(this::editAlbum);
    btnInterpret.addActionListener(e -> editInterpret());
...

private void editAlbum(ActionEvent e) {
    // tu, was Du tun musst.
}

private void editInterpret() {
    // tu, was Du tun musst.
}
 

Ähnliche Java Themen

Neue Themen


Oben