OOP Eingabevariablen der Klasse Raum in der Methode addEvent ans Ende einer ArrayList einfügen

progr

Mitglied
Hallo zusammen

Disclaimer 1: Ich hoffe, ich darf einfach 3 Java-Klassen unten einfügen. Mit der SuFu habe ich schon danach gesucht, aber leider nichts direkt zu einem add mit Objekten wie Events/Veranstaltungen gefunden.
Disclaimer 2: Falls (unten erwähnt) ArrayList nicht geht, sind wir auch für Lösungen mit Array oder anderem dankbar.

Wir wollen einen Raumplaner programmieren .
Folgendes ist bereits vorhanden:

  • Klasse 'Raum' mit einer Raumliste in einer Klasse 'Raumlist' (LinkedList)
  • Klasse 'Veranstaltung' mit einer Veranstaltungsliste in einer Klasse 'Veranstaltungslist' (LinkedList)
  • Unterklasse 'EingabeFenster', die von Hauptklasse 'Fenster' erbt

Von der Hauptklasse wird bereits eine Raum- und Veranstaltungsliste erstellt und wir möchten nun pro Raum direkt einer ArrayList die Events für diesen Raum zuweisen.

Die verschiedenen Eingabevariablen sollen in der Klasse Raum in der Methode addEvent ans Ende einer ArrayList pro Raum eingefügt werden.

Java:
import java.util.*;


public class Raum {
    public static Raumlist raumList = new Raumlist ();
    int raumnummer;
    int kapazität;
    
    public Raum(int raumnummer, int kapazität) {
        this.raumnummer = raumnummer;
        this.kapazität = kapazität;
    }


    public String toString() {
        return "Raum (Raumnummer= " + raumnummer + ", Kapazität= " + kapazität+ ")";
            
    }
    
    public int getSize(){
        return raumList.size();
    }
    
    
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + kapazität;
        result = prime * result + raumnummer;
        return result;
    }


    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Raum other = (Raum) obj;
        if (kapazität != other.kapazität)
            return false;
        if (raumnummer != other.raumnummer)
            return false;
        return true;
    }




    
    public static void main(String[] args) {
        //List<Raum> raumList = new LinkedList<Raum>();


    }




}

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


import javax.swing.*;
import javax.swing.table.DefaultTableModel;




public class Fenster implements ActionListener {
    
    private JFrame frame;
    private JTable table_Raeume;
    private JTable table_Veranstaltungen;
    private JButton btnZuweisen;
    private JButton btnAusgeben;
    private JButton btnX;
    private Veranstaltung veranstaltungen;
    private Raum rList;
    private boolean initialized = false;


    
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Fenster window = new Fenster();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    /**
     * Create the application.
     */
    public Fenster() {


        initialize();


    }


    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame("Programmierprojekt: Grp 01");
        frame.setBounds(100, 100, 874, 575);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
        this.btnZuweisen = new JButton("Veranstaltung zuweisen");
        btnZuweisen.setBounds(23, 240, 213, 30);
        btnZuweisen.addActionListener(this);
        frame.getContentPane().add(btnZuweisen);
        
        this.btnAusgeben = new JButton("Raumbelegung ausgeben");
        btnAusgeben.setBounds(641, 240, 194, 30);
        btnAusgeben.addActionListener( this );
        frame.getContentPane().add(btnAusgeben);
        
        JTextPane textPane_Logs = new JTextPane();
        textPane_Logs.setBounds(23, 328, 812, 197);
        frame.getContentPane().add(textPane_Logs);
        
     
        if(Raum.raumList.size()<=0){
        Raum.raumList.add( new Raum( 100, 20 ) );
        Raum.raumList.add( new Raum( 101, 30 ) );
        Raum.raumList.add( new Raum( 102, 45 ) );
        Raum.raumList.add( new Raum( 200, 80 ) );
        Raum.raumList.add( new Raum( 300, 90 ) );
        }
        
        
        DefaultTableModel modelRaum = new DefaultTableModel(); 
        this.table_Raeume = new JTable(modelRaum) {
            public boolean isCellEditable(int row, int col)
            {
                return false;
         }};
         
         modelRaum.addColumn("Raumnummer"); 
         modelRaum.addColumn("Kapazität"); 
                
         for (int i = 0; i < Raum.raumList.size(); i++) {
               modelRaum.addRow(new Object[]{
                      Raum.raumList.get(i).raumnummer,
                     Raum.raumList.get(i).kapazität
                       });
         }
         
        
        
            
        JScrollPane spTable2 = new JScrollPane(this.table_Raeume);
        
        spTable2.setBounds(434, 35, 403, 194);
        frame.getContentPane().add(spTable2);
        
        
      
        
        if(veranstaltungen.vList.size()<=0){
        veranstaltungen.vList.add( new Veranstaltung("DMDB","Datenmodellierung und Datenbanken","WI-2o",48,25));
        veranstaltungen.vList.add( new Veranstaltung("PRM","Projektmanagement","WI-2o",48,25));
        veranstaltungen.vList.add( new Veranstaltung("PRG2","Programmieren 2","WI-2o",56,32));
        veranstaltungen.vList.add( new Veranstaltung("BEWI","Business Englich","WI-2o",48,32));
        veranstaltungen.vList.add( new Veranstaltung("MWI","Mathematik","WI-2o",56,32));
        }


        DefaultTableModel model = new DefaultTableModel(); 
        this.table_Veranstaltungen = new JTable(model){
            public boolean isCellEditable(int row, int col)
            {
                return false;
         }};
         
        model.addColumn("Name"); 
        model.addColumn("Kürzel"); 
        model.addColumn("Kursbezeichnung"); 
        model.addColumn("Stunden"); 
        model.addColumn("Kapazität"); 


        
        JScrollPane spTable = new JScrollPane(this.table_Veranstaltungen);
        this.table_Veranstaltungen.setColumnSelectionAllowed(false);
        spTable.setBounds(23, 35, 401, 194);
                    
        for (int i = 0; i < veranstaltungen.vList.size(); i++) {
              model.addRow(new Object[]{
                      veranstaltungen.vList.get(i).langebezeichnung,
                      veranstaltungen.vList.get(i).kurzbezeichnung,
                      veranstaltungen.vList.get(i).Kursbezeichnung,
                      veranstaltungen.vList.get(i).Gesamt_Stundenumfang,
                      veranstaltungen.vList.get(i).benötige_Kapazität
                      });
        }


        frame.getContentPane().add(spTable);
               
        JLabel lblVeranstaltungen = new JLabel("Veranstaltungen");
        lblVeranstaltungen.setFont(new Font("Calibri", Font.BOLD, 16));
        lblVeranstaltungen.setBounds(23, 14, 187, 20);
        frame.getContentPane().add(lblVeranstaltungen);
        
        JLabel lblRaeume = new JLabel("R\u00E4ume");
        lblRaeume.setFont(new Font("Calibri", Font.BOLD, 16));
        lblRaeume.setBounds(434, 14, 187, 20);
        frame.getContentPane().add(lblRaeume);
        
        JLabel lblLogs = new JLabel("Logs");
        lblLogs.setFont(new Font("Calibri", Font.BOLD, 16));
        lblLogs.setBounds(23, 306, 187, 20);
        frame.getContentPane().add(lblLogs);
        
        this.btnX = new JButton("Veranstaltung entfernen");
        btnX.addActionListener(this);
        btnX.setBounds(434, 240, 197, 30);
        frame.getContentPane().add(btnX);
        
        
    }
    
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == btnZuweisen){
            
            int selectedRow = this.table_Veranstaltungen.getSelectedRow();
                   
                //System.out.println(this.veranstaltungen.vList.get(selectedRow).langebezeichnung);
              
            if (selectedRow>=0){
              Raum Raum = null;
            EingabeFenster Eingabe  = new EingabeFenster(2);
            //System.out.println(Raum.raumList.size());
            }
        }
        if(e.getSource() == btnAusgeben){
            System.out.println("Alle Raumbelegungen ausgeben");
        }
        if(e.getSource() == btnX){
            System.out.println("Alle Veranstaltungen vom gewählten Raum entfernen");
            System.out.println(this.table_Raeume.getSelectedRow());
        }        
            
    }  
    


    
}

Java:
import java.awt.*;


import javax.swing.*;
import javax.swing.table.DefaultTableModel;


import java.awt.event.*;
import java.util.Date;




public class EingabeFenster extends Fenster {


    JLabel label;


    
    public EingabeFenster(){
        
    }
    
    public EingabeFenster(int selectedRow){
        Runnable r = new Runnable () {
            private Raumlist rList;
            private Veranstaltung veranstaltungen;
            private Veranstaltungslist eVlist;


            public void run() {
            
              this.rList = Raum.raumList;
              this.eVlist = Veranstaltung.vList;
             System.out.println(eVlist);


                JPanel buttons = new JPanel(new 
                    FlowLayout(FlowLayout.CENTER, 5, 5));
                
           
                
                JPanel nested1 = new JPanel(); // FlowLayout
                JLabel titleRaumauswahl = new JLabel("Raumauswahl: ");
                titleRaumauswahl.setFont(new Font("Calibri", Font.PLAIN, 16));
                
                DefaultComboBoxModel comboModel = new DefaultComboBoxModel(); 
                JComboBox comboBoxRaum = new JComboBox(comboModel);
                for (int i = 0; i < Raum.raumList.size(); i++) {
                    comboModel.addElement(Raum.raumList.get(i).raumnummer);
                    
                }
                System.out.println(Raum.raumList.size());
                //comboModel.addElement(arg0);
                
                
                nested1.add(titleRaumauswahl);
                nested1.add(comboBoxRaum);
                
                JPanel nested2 = new JPanel(); // FlowLayout
                JLabel titleStartDate = new JLabel("Datum: ");
                titleStartDate.setFont(new Font("Calibri", Font.PLAIN, 16));
                
                JTextField dateStart = new JTextField ("");
                dateStart.setColumns(10);     
                
                nested2.add(titleStartDate);
                nested2.add(dateStart);
              
                
                JPanel nested3 = new JPanel(); // FlowLayout
                JLabel titleEndDate = new JLabel("Zeit: ");
                titleEndDate.setFont(new Font("Calibri", Font.PLAIN, 16));
                
                
                JComboBox timeStartHour = new JComboBox();
                timeStartHour.setModel(new DefaultComboBoxModel(new String[] {"06", "07","08","09","10","11","12","13","14","15","16","17","18","19"}));
        
                JComboBox timeStartMin = new JComboBox();
                timeStartMin.setModel(new DefaultComboBoxModel(new String[] {"00", "30"}));
                JLabel seperator = new JLabel(" - ");
                seperator.setFont(new Font("Calibri", Font.PLAIN, 16));
                
                JComboBox timeEndHour = new JComboBox();
                timeEndHour.setModel(new DefaultComboBoxModel(new String[] {"06", "07","08","09","10","11","12","13","14","15","16","17","18","19","20"}));
        
                JComboBox timeEndMin = new JComboBox();
                timeEndMin.setModel(new DefaultComboBoxModel(new String[] {"00", "30"}));
            
               
                nested3.add(titleEndDate);
                nested3.add(timeStartHour);
                nested3.add(timeStartMin);
                nested3.add(seperator);
                nested3.add(timeEndHour);
                nested3.add(timeEndMin);               
                
                
                JPanel outer = new JPanel(new BorderLayout());
                outer.add(nested1, BorderLayout.NORTH);
                outer.add(nested2, BorderLayout.CENTER);
                outer.add(nested3, BorderLayout.SOUTH);
                
       
                JPanel gui = new JPanel(new BorderLayout(5,5));                
                gui.add(outer, BorderLayout.SOUTH);
                


                final CardLayout cl = new CardLayout();
                final JPanel cards = new JPanel(cl);
                
                gui.add(cards);
                JLabel infoText = new JLabel("Bitte Raum auswählen um Veranstaltung hinzuzufügen");
                cards.add(infoText);
                
                
                JOptionPane.showMessageDialog(null, gui, " ",1);
                
                                
                System.out.println("Raum: "+comboBoxRaum.getSelectedIndex() + " Datum:"+dateStart.getText()+" Startzeit:"+timeStartHour.getSelectedItem().toString()+"."+timeStartMin.getSelectedItem().toString()+" Ende:"+timeEndHour.getSelectedItem().toString()+"."+timeEndMin.getSelectedItem().toString());
                
                
                // Werte Veranstaltung: 
                // Werte Raum
                
                // Vergleiche: Kapazität, Überlappung, 
                
                // Zeitdauer,    Überbuchung (Zeit schon verplant), nur einmal pro Halbtag             
                
                String errorMsg = null;
                if (Raum.raumList.get(comboBoxRaum.getSelectedIndex()).kapazität>=100){
                    
                    errorMsg = "Raumzuweisung ungültig: Ungenügende Kapazität";
                }
                
               
                
               // Raum.raumList.get(comboBoxRaum.getSelectedIndex()).addEvent("Time",id,"duration",)
                
                if (errorMsg.equals("")){
                  //beendet und wird eingefügt
                }
                else {
                cards.remove(infoText);


                 infoText = new JLabel(errorMsg);
                
                cards.add(infoText);
                JOptionPane.showMessageDialog(null, gui, " ",0);
                
                }
                
            }
        };
        SwingUtilities.invokeLater(r);
    }






}

Hoffentlich verstehen alle, was ich meine...:rtfm::rtfm::rtfm:
Danke vielmals für eure Hilfe!
 
1. Ich sehe zwar eine Deklaration Raumlist, aber irgendwo eine entsprechende Klassendefinition.
2. Die Zeile, in der die Variable raumList als LInkedList<Raum> initialisiert wird, ist auskommentiert. Entgegen deiner Aussage gibt es deshalb keine LinkedList für Räume.
3. Ich sehe keine Klassen Veranstaltung und Veranstaltungslist, sondern nur ein paar Orte wo sie verwendet werden.
4. Was meinst du mit "Die verschiedenen Eingabevariablen sollen in der Klasse Raum in der Methode addEvent ans Ende einer ArrayList pro Raum eingefügt werden" ? Warum jetzt auf einmal eine ArrayList? Und geht es darum, einem Raum Veranstaltungen hinzuzufügen, oder um mehr?
5. Warum erweitert "EingabeFenster" "Fenster"? Dadurch implementiert Eingabefenster automatisch ActionListener, wird aber nirgendwo als ActionListener verwendet, obwohl es in der Eingabefenster-Klasse durchaus Kandidaten gäbe, z. B. die JComboBox comboBoxRaum.
6. EingabeFenster hat zwei Konstruktoren. Im default Konstruktor passiert schier gar nix, im Konstruktor mit dem int Parameter passiert zwar allerhand, aber der int Parameter wird nie verwendet.
Hoffentlich verstehen alle, was ich meine...:rtfm::rtfm::rtfm:
Nein.
 
Zuletzt bearbeitet:
Hallo Harry, hier bereits die Antworten zu 1,3 und 4..

1. Ich sehe zwar eine Deklaration Raumlist, aber irgendwo eine entsprechende Klassendefinition.


Java:
import java.util.ArrayList;
import java.util.LinkedList;


public class Raumlist extends LinkedList<Raum> {
	@Override
	public String toString() {
		StringBuffer myBuffer = new StringBuffer();
		myBuffer.append("[");
		for (Raum r : this) {
			myBuffer.append("\n" + r.toString());
		}


		myBuffer.append("\n]");
		return myBuffer.toString();
	}






}






3. Ich sehe keine Klassen Veranstaltung und Veranstaltungslist, sondern nur ein paar Orte wo sie verwendet werden.




Java:
import java.util.*;


public class Veranstaltung {
	public static Veranstaltungslist vList = new Veranstaltungslist ();
	String kurzbezeichnung;
	String langebezeichnung;
	String Kursbezeichnung;
	int Gesamt_Stundenumfang;
	int benötige_Kapazität;
	
	


	public Veranstaltung(String kürzbezeichnung, String langebezeichnung, String kursbezeichnung, int gesamt_Stundenumfang, int benötige_Kapazität) {
		this.kurzbezeichnung = kürzbezeichnung;
		this.langebezeichnung = langebezeichnung;
		Kursbezeichnung = kursbezeichnung;
		Gesamt_Stundenumfang = gesamt_Stundenumfang;
		this.benötige_Kapazität = benötige_Kapazität;
	}


	public String toString() {
		return "Veranstaltung (kurzbezeichnung= " + kurzbezeichnung+ ", langebezeichnung= " + langebezeichnung+ ", Kursbezeichnung= " + Kursbezeichnung+ ", Gesamt_Stundenumfang= " + Gesamt_Stundenumfang+ ", benötige_Kapazität= " + benötige_Kapazität + ")";
	}




	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + Gesamt_Stundenumfang;
		result = prime * result
				+ ((Kursbezeichnung == null) ? 0 : Kursbezeichnung.hashCode());
		result = prime * result + benötige_Kapazität;
		result = prime * result
				+ ((kurzbezeichnung == null) ? 0 : kurzbezeichnung.hashCode());
		result = prime
				* result
				+ ((langebezeichnung == null) ? 0 : langebezeichnung.hashCode());
		return result;
	}


	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Veranstaltung other = (Veranstaltung) obj;
		if (Gesamt_Stundenumfang != other.Gesamt_Stundenumfang)
			return false;
		if (Kursbezeichnung == null) {
			if (other.Kursbezeichnung != null)
				return false;
		} else if (!Kursbezeichnung.equals(other.Kursbezeichnung))
			return false;
		if (benötige_Kapazität != other.benötige_Kapazität)
			return false;
		if (kurzbezeichnung == null) {
			if (other.kurzbezeichnung != null)
				return false;
		} else if (!kurzbezeichnung.equals(other.kurzbezeichnung))
			return false;
		if (langebezeichnung == null) {
			if (other.langebezeichnung != null)
				return false;
		} else if (!langebezeichnung.equals(other.langebezeichnung))
			return false;
		return true;
	}


	public static void main(String[] args) {
//		List<Veranstaltung> vList = new ArrayList<Veranstaltung>();
		
	}


}


//Raum.raumList.add(); so können wir die globale raumList in eine andere Classe/Dok benuzten!


Java:
import java.util.ArrayList;
import java.util.LinkedList;


public class Veranstaltungslist extends  ArrayList<Veranstaltung> {
	@Override
	public String toString() {
		StringBuffer myBuffer = new StringBuffer();
		myBuffer.append("[");
		for (Veranstaltung v : this) {
			myBuffer.append("\n" + v.toString());
		}


		myBuffer.append("\n]");
		return myBuffer.toString();
	}
}




4. Was meinst du mit "Die verschiedenen Eingabevariablen sollen in der Klasse Raum in der Methode addEvent ans Ende einer ArrayList pro Raum eingefügt werden" ? Warum jetzt auf einmal eine ArrayList? Und geht es darum, einem Raum Veranstaltungen hinzuzufügen, oder um mehr?


Unsere Frage: Wennn wir eine zusätzliche Arrayliste machen (Events), wie können wir die Informationen aus der Veranstaltungslist und aus der Raumlist hereinladen?
 
Clever. Die eigentlichen Fragen zur Programmlogigk, die ich gestellt habe, hast du (oder ihr) ignoriert.
Veranstaltungslist und Raumlist sind statische Variablen der Veranstaltung und Raum Klasse und dementsprechend von überall zugänglich. Inwiefern die verwendung von statischen Variablen an dieser Stelle eine gute Idee ist, kommentiere ich nicht.
Was mir bei den ganzen Klassen fehlt, ist eine Hauptklasse, bei der alle Fäden zusammenlaufen. Diese Klasse könnte z. B. Raumverwaltung heissen und grob wie folgt aufgebaut sein:
1. Sie hat eine Liste mit Räumen.
2. Sie hat eine Liste mit Veranstaltungen.
Die Listen in 1. und 2. können einfache ArrayLists oder LinkedLists sein. Ich sehe wenig Sinn darin, z. b. ArrayList<Veranstaltung> zu erweitern, nur um toString zu überschreiben. Eine geordnete Ausgabe der Räume oder Veranstaltungen könnte auch in der Klasse Raumverwaltung implementiert sein.
3. Ihr können Räume hinzugefügt werden.
4. Ihr können veranstaltungen hinzugefügt werden.
5. Sie erlaubt es, einem bestimmten Raum eine bestimmte Veranstaltung zuzuordnen. Dazu muss überprüft werden, ob der Raum von der Kapazität geeignet ist.
 
Zuletzt bearbeitet:

Zurück
Oben