Interaktion von GUI-Klassen - wie?

  • Themenstarter Themenstarter herates
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
H

herates

Gast
hallo,
ich muss eine gui für eine lagerverwaltung konzipieren.
so soll das aussehen.
doch habe ich probleme bei der konzeption.
ich hatte mir gedacht für jedes Fenster eine eigene Klasse zu erstellen. doch wie bring ich es fertig das die klassen miteinader interagieren können.
wie packt man sowas am besten an.

dann hätte ich die frage wie ich eine excelartige tabelle am besten realisiere. wer sich das bild anschaut weiss bescheid. alle meine versuche sind erfolglos. ich habs es jetzt mit einem jtable in einem scrollpane versucht. doch bekomm ich es nicht hin das es angezeigt wird.

Code:
import javax.swing.table.DefaultTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LAGER {
	
	public JFrame rootFrame = new JFrame("Lagerverwaltung");
	
	//Objekte die benötigt werden (frame, panel etc)
		private JButton lagerHinzufuegen = new JButton("Lager hinzufügen");
	private JButton lagerLoeschen = new JButton("Lager löschen");
	private JButton warenEinlagern = new JButton("Waren einlagern");
	private JButton warenAuslagern = new JButton("Waren auslagern");
	private JLabel title = new JLabel("Lagerverwaltung Hauptseite");
	private JLabel status = new JLabel("status");
	private JTable table = new JTable();
	
	
	
	//4 Panels
	JPanel ganz = new JPanel(new BorderLayout());
	JPanel halb = new JPanel(new BorderLayout());
	JPanel unten = new JPanel(new BorderLayout());
	JPanel button = new JPanel(new BorderLayout());
	JPanel buttonrechts = new JPanel(new BorderLayout());
	JPanel buttonlinks = new JPanel(new BorderLayout());
	JScrollPane scrollpane = new JScrollPane(table);
	
			
	//Konstruktor
	public LAGER(){
		
		
		
		//Objekte werden den Panes hinzugefügt
		ganz.add(title, BorderLayout.NORTH);
		ganz.add(halb,BorderLayout.SOUTH);
		halb.add(scrollpane, BorderLayout.WEST);
		halb.add(unten, BorderLayout.SOUTH);
		unten.add(status, BorderLayout.SOUTH);
		unten.add(button, BorderLayout.NORTH);
		button.add(buttonrechts, BorderLayout.EAST);
		button.add(buttonlinks, BorderLayout.WEST);
		buttonrechts.add(lagerHinzufuegen, BorderLayout.WEST);
		buttonrechts.add(lagerLoeschen, BorderLayout.EAST);
		buttonlinks.add(warenEinlagern, BorderLayout.WEST);
		buttonlinks.add(warenAuslagern, BorderLayout.EAST);
		scrollpane.add(table);
	
			
		
		
		//panes werden dem rootFrame hinzugefügt
		rootFrame.getContentPane().add(ganz);		
		
				
		//ActionListener
		lagerHinzufuegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				//COdeder passiet
				System.out.println("Lager hinzugefügt!");
			}

		});
		lagerLoeschen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Lager gelöscht");
			}

		});
		warenEinlagern.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				//COdeder passiet
				System.out.println("Ware eingelagert");
			}

		});
			warenAuslagern.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e)
			{
				//COdeder passiet
				System.out.println("Ware ausgelagert");
			}

		});
		
		
		//Abschliessende Befehle und ausgabe des fensters
		rootFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		rootFrame.setResizable(false);
		rootFrame.pack();
		rootFrame.setVisible(true);
	}
	
	
	//TESTEN DER GUI	
	public static void main(String [] arhg){
		LAGER hauptLager = new LAGER();
	}
}

das habe ich bis jetzt erreicht.
bin für jede hilfe dankbar[/url]
 
*Titel geändert*

Grob gesagt: Lege Dir Referenzen auf Objekte Deiner GUI-Klassen an und übergib sie beim Aufruf dem Konstruktor der aufgerufenen Klasse. Auf der übergebenen Referenz kannst Du dann die Methoden des referenzierten Objektes aufrufen.
 
nach 2 vorlesung java GUI könnten da schonmal probleme auftauchen, denke ich.
da ich bis jetzt auch noch nie mit der Java Dokumentation gearbeitet habe und ich probleme mit technischen vokablen habe weiss ich nicht so recht wie ich anfangen sollte.
 
Um Dir das hier zu erklären, müsste man einen längeren, vielleicht mehrseitigen Text verfassen. Und im Prinzip wäre das dann wohl auch nur eine Wiederholung von Wiederholungen. Es handelt sich hierbei eigentlich mehr oder weniger um Grunglagenwissen. Im Forum wurden zu diesem Thema schon einige Fragen beantwortet, auch mit Beispielcode.
Suche mal danach, oder erweitere Dein Grundwissen mit einschlägiger Lektüre, Z.B. http://www.galileocomputing.de/openbook/javainsel4/
 
Gleichwohl ich L-ectron-X zustimmen muss, hier einmal aus weihnachtlichen Erwägungen ein simples Beispiel, aus dem du Anregungen ziehen könntest:
Code:
/*
 * Created on 21.12.2004
 *
 * @author ABollm
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.awt.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import Lagerverwaltung.*;

public class JTableStorage extends JFrame implements TableModelListener
{
    //private static final String MENU_ITEM_END = "Beenden";
    private static final String MENU_ITEM_INVENTORY = "Lagerbestand";
    
	private JPanel jpbutt;
	private JTable table;
	private SchwerlastLager sl = new SchwerlastLager("Parkhaus 3",1500);
 
	private String jbt[] = {
	        "Lager hinzu",
			"Lager löschen",
			"Waren einlagern",
			"Waren ausgeben"
	};
	private String storageType[] = {
			sl.toString(),
			//sl.toString(),
			"Getreidelager",
			"Öllager"
	};
	private String location[] = {
			"Parkhaus 3",
			"Silo 2",
			"Tank 1"
	};
	private String capacityUnit[] = {
			"Stellpl.",
			"Tonnen",
			"Liter"
	};
	
	private double capacityMax[] = {
			1500,
			10000,
			60000
	};
	private double capacityOccupied[] = {
		    135,
			0,
			10000
	};
	
	
    private JTableStorage()
    {
    	Container cp = this.getContentPane();
        //cp.setBackground(Color.LIGHT_GRAY);

    	//
    	// Datentypen           -> String   -> String   -> Double           -> String       -> Double
    	// für Spalten-Nr.         0           1           2                   3               4   
    	String[] columnNames = {"Lagerart", "Standort", "Kapazität (frei)", "Kap. Einheit", "Kapazität (belegt)"};
    	Object[][] data =
        {
            {storageType[0], location[0], new Double(capacityMax[0]-capacityOccupied[0]), capacityUnit[0], new Double(capacityOccupied[0])},
            {storageType[1], location[1], new Double(capacityMax[1]-capacityOccupied[1]), capacityUnit[1], new Double(capacityOccupied[1])},
            {storageType[2], location[2], new Double(capacityMax[2]-capacityOccupied[2]), capacityUnit[2], new Double(capacityOccupied[2])}
        };
 
        DefaultTableModel model = new DefaultTableModel(data, columnNames);
        model.addTableModelListener( this );

        table = new JTable( model )
        {
        	
            // Das Zurückliefern der Klasse jeder Spalte erlaubt die spalten-
        	// spezifische und klassenbasierte Verwendung eines Renderers
            public Class getColumnClass(int column)
            {
                return getValueAt(0, column).getClass();
            }
 
            /**
             * Standardmäßig sollen außer Spalte 4 die Spalten
             * nicht edierbar sein, sie können
             * aber u.a. aus Demonstrationsgründen hier auch 
             * edierbar geschaltet werden.
             */ 

            public boolean isCellEditable(int row, int column)
            {
                if (column != 4 )
                    return false;
                else
                    return true;
            }
        };
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
                                                          
        jpbutt = new JPanel(new GridLayout(1, 4, 3, 3));
        
        JScrollPane scrollPane = new JScrollPane( table );
        cp.add( scrollPane );

        for (int i=0; i<jbt.length; i++)
        	jpbutt.add( new JButton( jbt[i] ));
        
        getContentPane().add(jpbutt, BorderLayout.SOUTH);

    }
 
    /*
     *  Die Kapazitäten werden (erneut) berechnet, wenn sich der entspr. Wert (frei) ändert.
     */
    public void tableChanged(TableModelEvent e)
    {
    	
        if (e.getType() == TableModelEvent.UPDATE)
        {
            int row = e.getFirstRow();
            int column = e.getColumn();
 
            if (column == 4)
            {

            	double co = ((Double)table.getValueAt(row, column)).doubleValue();
            	Double vf = new Double(capacityMax[row]-co);
            	Double vo = new Double(co);
                
                if (column == 4 ) {
                   System.out.println("Akt. Kapazität (belegt): "+vf + " "+capacityUnit[row]);
                   table.setValueAt(vf, row, 2);

                }
            }
        }
    }


    public static void main(String[] args)
    {
        JTableStorage frame = new JTableStorage();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.setTitle("Demo 0.1a Lagerverwaltung");
        frame.pack();
        frame.setBounds( 5, 5, 640, 400 );
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}

Vielleicht hilft es dir ja. Aber denke daran: Das ist lediglich ein erster Einstieg.

PS: Ich habe mir die Aufgabenstellung angesehen, deshalb auch das "import Lagerverwaltung.*;"
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben