kleines Programm mit inneren Klassen

Status
Nicht offen für weitere Antworten.
Moin!
Hab von meinem Prof folgende Aufgabe zum ersten Kontakt mit den control-Komponenten bekommen :meld: :

Legen Sie auf Ihrem Rechner ein Verzeichnis foo an, in das Sie ein paar kleine Dateien kopieren.
Schreiben Sie nun eine Java-Applikation, die die Namen der in foo enthaltenen Dateien ermittelt und auf drei verschiedene Arten jeweils in einem eigenen Fester ausgibt:
1. als Einträge einer Checkbox,
2. als Einträge eines PullDown-Menüs und
3. als Einträge einer Auswahlliste.
Entwerfen Sie dabei für jedes der drei Ausgabefenster eine innere Klasse, die jeweils die Klasse Frame erweitert. Beschriften Sie die Ausgabefenster.

Hab das Ding dann auch realisiert. Aber bekannter Weise führen ja viele Wege nach Rom. Und ich bin mir nicht sicher, ob ich den besten gewählt hab ;)
Wäre nett, wenn sich das ma jemand angucken könnte. Besonders mit der Benutzung der inneren Klassen hatte ich so meine Probleme. Außerdem frag ich mich, ob man da nich was vereinfachen kann. Die Methode zeigen() kommt ja drei Mal vor und die innere Klasse WAdapter auch. Das riecht für mich förmlich nach ner Möglichkeit einer Vereinfachung. Ich weiß nur leider nich wie. Bin noch blutiger Anfänger :bahnhof: Desweiteren hab ich immer so meine Probleme mit diesen Modifiern (heißen die so?). Also ich meine z.B. public, private etc. Also wäre echt nett, wenn sich jemand die Mühe macht, das Prog ma durchzuchecken, um mich danach in Grund und Boden zu kritisieren :autsch: .

Hier der komplette Code (Das Verzeichnis "foo" muss sich im selben Verzeichnis befinden, wie die Class-Dateien):

Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;

public class Widgets {
	
	public static File[] files;
	
	public static void main(String[] args) {
		
		File directory = new File("foo");
		
		if (!directory.exists()) {
	    		
	    	System.out.println("Das Verzeichnis " + directory.getName()
	    	+ " existiert nicht!");
	    }
	    
	    else {
	    	
	    	if (directory.isDirectory()) {
		
		        files = directory.listFiles();
		        
		        if (files.length == 0) {
		        	
		        	System.out.println("Das Verzeichnis " + directory.getName()
		        	+ " enthaelt keine Dateien!");
		        }
		        
		        else {
		        	
		            try {
		        	
			            Checkb checkbox = new Checkb();
		                PullDown pDown = new PullDown();
		                Liste list = new Liste();
		
		                checkbox.addCheckbox();
		                pDown.addPullDown();
		                list.addList();
		
		                checkbox.zeigen();
		                pDown.zeigen();
		                list.zeigen();
		            }
		        
		            catch (Exception e) {
			
			            System.out.println(e.getMessage());
		            }
		        }
	        }
	        
	        else {
	    	
	    	    System.out.println(directory.getName()
	    	    + " ist kein Verzeichnis!");
	        }
	    }
	}
		
		
	private static class Checkb extends Frame {
		
		
		class WAdapter extends WindowAdapter {
			
            public void windowClosing( WindowEvent e ) {
            	
            	setVisible(false);
            	dispose();
            }
        }

		
		public Checkb() {
			
			Frame f = new Frame();
			
			this.setTitle(" Checkbox ");
			this.setSize(225, 225);
		    this.setLocation(30, 50);
		    this.setVisible(true);
		    this.setResizable(false);
		    this.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 20));
		    
		    WAdapter wa = new WAdapter();
		    
            addWindowListener(wa);

		}
		
		public void addCheckbox() {
			
			for (int i = 0; i < files.length; i++) {
			     
			    this.add(new Checkbox(files[i].getName()));
		    }
		}
		
		public void zeigen() {
			
			this.show();
		}
	}
	
	
	public static class PullDown extends Frame {
		
		
		class WAdapter extends WindowAdapter {
			
            public void windowClosing( WindowEvent e ) {
            	
            	setVisible(false);
            	dispose();
            }
        }
		
		
		Choice ch = new Choice();
		
		public PullDown() {
			
			Frame f = new Frame();
			
			this.setTitle(" PullDown-Menü ");
			this.setSize(225, 225);
		    this.setLocation(300, 50);
		    this.setVisible(true);
		    this.setResizable(false);
		    this.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
		    
		    WAdapter wa = new WAdapter();
		    
            addWindowListener(wa);
		}
		
		public void addPullDown() {
			
			for (int i = 0; i < files.length; i++) {
				
				ch.add(" " + files[i].getName() + " ");
			}
			
			this.add(ch);
		}
		
		public void zeigen() {
			
			this.show();
		}
	}
	
	
	public static class Liste extends Frame {
		
		
		class WAdapter extends WindowAdapter {
			
            public void windowClosing( WindowEvent e ) {
            	
            	setVisible(false);
            	dispose();
            }
        }
		
		
		List li = new List(4, true);
		
		public Liste() {
			
			Frame f = new Frame();
			
			this.setTitle(" Auswahlliste ");
			this.setSize(225, 225);
		    this.setLocation(570, 50);
		    this.setVisible(true);
		    this.setResizable(false);
		    this.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
		    
		    WAdapter wa = new WAdapter();
		    
            addWindowListener(wa);
		}
		
		public void addList() {
			
			for (int i = 0; i < files.length; i++) {
				
				li.add(" " + files[i].getName() + " ");
			}
			
			this.add(li);
		}
		
		public void zeigen() {
			
			this.show();
		}
	}
}
 
R

Roar

Gast
die WAdapter klassebrauchst du nur einmal.
du könntest noch eine abstrakte klasse machen die von Frame erbt, zeigen() implementiert und die befehle die im konstruktor der einzelnen kalssen gleich sind, ausführt (setSize() , setLocation() usw.)

deine inneren klassen leiten dann von der abstrakten kalsse ab und werden kürzer
 
Danke schonmal für die Antwort. Den Schwachsinn, denn ich bei der WAdapter Klasse verzapft hab, hab ich auch direkt gerafft. Den Rest schau ich mir dann Morgen nochma an. Werd jetzt erstma mein Wochenendbier zu mir nehmen. Meld mich dann bestimmt nochma zurück ;)

A.P.
 
So, da bin ich wieder. Hab das jetzt alles so gemacht, wie Du gesagt hast. Läuft auch alles wunderbar und hab den Code ordentlich reduziert. Allerdings frag ich mich, warum es ne abstrakte Klasse sein soll. Ich hab das jetzt mit ner ganz normalen konkreten Klasse gemacht. Wäre nett, wenn Du mir das nochma erklären könntest. ???:L

MfG A.P.
 

mic_checker

Top Contributor
Dann zeig mal wie du es gemacht hast.

Ne abstrakte Klasse würde insofern sinn machen als das du dann weisst das in den abgeleiteten Klassen die Methoden vorhanden sind (au0er du willst wieder ne neue abstrakte klasse), sprich du kannst zeigen() aufrufen etc.

Wie Roar schon gesagt hat, wirds dadurch kürzer und es ist etwas schöner ;)

Am besten du postetst mal deine neue Lösung...
 
Also ist das mit der abstrakten Klasse eher Hilfreich, um den Überblick zu behalten, damit man keine Methoden vergisst?

Hier mein neuer Code (Ich gebe zu, ich habe etwas übertrieben, als ich schrieb, dass er ordentlich reduziert wurde. Aber schöner is er allemal :))

Die Hauptklasse mit der main()-Methode

Code:
import java.io.*;
import java.awt.*;

public class Widgets {
	
	public static File[] files;
	
	public static void main(String[] args) {
		
		File directory = new File("foo");
		
		if (!directory.exists()) {
	    		
	    	System.out.println("Das Verzeichnis " + directory.getName()
	    	+ " existiert nicht!");
	    }
	    
	    else {
	    	
	    	if (directory.isDirectory()) {
		
		        files = directory.listFiles();
		        
		        if (files.length == 0) {
		        	
		        	System.out.println("Das Verzeichnis " + directory.getName()
		        	+ " enthaelt keine Dateien!");
		        }
		        
		        else {
		        	
		            try {
		        	
			            Checkb checkbox = new Checkb();
		                PullDown pDown = new PullDown();
		                Liste list = new Liste();
		
		                checkbox.addCheckbox();
		                pDown.addPullDown();
		                list.addList();
		
		                checkbox.zeigen();
		                pDown.zeigen();
		                list.zeigen();
		            }
		        
		            catch (Exception e) {
			
			            System.out.println(e.getMessage());
		            }
		        }
	        }
	        
	        else {
	    	
	    	    System.out.println(directory.getName()
	    	    + " ist kein Verzeichnis!");
	        }
	    }
	}
		
		
	private static class Checkb extends Window {
		
		public Checkb() {
			
			Frame f = new Frame();
			
			this.setTitle(" Checkbox ");
		    this.setLocation(30, 50);
		    this.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 20));
		    
		    WindowClose wc = new WindowClose();
		    
            addWindowListener(wc);

		}
		
		public void addCheckbox() {
			
			for (int i = 0; i < files.length; i++) {
			     
			    this.add(new Checkbox(files[i].getName()));
		    }
		}
	}
	
	
	public static class PullDown extends Window {
		
		Choice ch = new Choice();
		
		public PullDown() {
			
			Frame f = new Frame();
			
			this.setTitle(" PullDown-Menü ");
		    this.setLocation(300, 50);
		    this.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
		    
		    WindowClose wc = new WindowClose();
		    
            addWindowListener(wc);
		}
		
		public void addPullDown() {
			
			for (int i = 0; i < files.length; i++) {
				
				ch.add(" " + files[i].getName() + " ");
			}
			
			this.add(ch);
		}
	}
	
	
	public static class Liste extends Window {
		
		List li = new List(4, true);
		
		public Liste() {
			
			Frame f = new Frame();
			
			this.setTitle(" Auswahlliste ");
		    this.setLocation(570, 50);
		    this.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20));
		    
		    WindowClose wc = new WindowClose();
		    
            addWindowListener(wc);
		}
		
		public void addList() {
			
			for (int i = 0; i < files.length; i++) {
				
				li.add(" " + files[i].getName() + " ");
			}
			
			this.add(li);
		}
	}
}

Klasse zum Schließen des Fensters

Code:
import java.awt.event.*;

public class WindowClose extends WindowAdapter {
			
    public void windowClosing( WindowEvent e ) {
            	
        e.getWindow().setVisible(false);
        e.getWindow().dispose();
    }
}

Klasse bei der ich mich Frage, ob abstrakt, oder nicht

Code:
import java.awt.*;

public class Window extends Frame {
	
	public void zeigen() {
			
	    this.setSize(225, 225);
	    this.setVisible(true);
	    this.setResizable(false);
		this.show();
	}
}
 
Deine KLasse Window ist ja nicht abstrakt, da gibts ja das Schlüsselwort "abstract".

Das is schon klar ;) Vielleicht sollte ich besser sagen: Klasse bei der ich mich Frage, ob sie abstrakt sein sollte, oder nicht. Roar hatte es ja so vorgeschlagen. Jetzt frag ich mich nur, warum.
 
R

Roar

Gast
weil 1. schönerer da man 2. kein Window instantiieren kann sondenr nur ihre unterklassen
im grunde ist es aber schnurz
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Koookie Kleines Frage - Antwort Programm (Anfänger) Java Basics - Anfänger-Themen 5
T erstes kleines Programm Java Basics - Anfänger-Themen 17
S Kleines Quiz Programm Java Basics - Anfänger-Themen 4
C Hilfe - Kleines Programm macht mir Schwierigkeiten Java Basics - Anfänger-Themen 2
E Erstes "kleines" Programm Java Basics - Anfänger-Themen 5
fLooojava Passwort generieren - kleines Programm Java Basics - Anfänger-Themen 15
R Kleines Programm, benötige Hilfe! Java Basics - Anfänger-Themen 6
F kleines Programm für ungerade oder gerade Zahl. Java Basics - Anfänger-Themen 18
O Neuen Blackberry 8800 oder Curve gegen kleines Programm Java Basics - Anfänger-Themen 9
S Kleines Programm mit ArrayList Java Basics - Anfänger-Themen 7
M Kleines Programm Java Basics - Anfänger-Themen 5
M kleines Java Programm (Verwaltung) Java Basics - Anfänger-Themen 16
K Kleines Programm zur Stapelverarbeitung schreiben, aber wie? Java Basics - Anfänger-Themen 7
E Kleines Programm programmieren.Nennt sich Tauglichkeitsteste Java Basics - Anfänger-Themen 9
T Kleines Programm - Fehler bei Ausgabe. Java Basics - Anfänger-Themen 5
A Kleines Programm: Mausklick in Frame entgegennehmen. Java Basics - Anfänger-Themen 8
D kleines Programm "in Dateien schreiben" Java Basics - Anfänger-Themen 3
D Mein kleines Programm etwas schöner machen :-) Java Basics - Anfänger-Themen 13
G kleines Prob bei "net send" programm Java Basics - Anfänger-Themen 2
S Kleines Java-Projekt; Kassenprogramm Java Basics - Anfänger-Themen 7
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
J Kleines Rechenprogramm Java Basics - Anfänger-Themen 13
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
B Input/Output Kleines Netzwerkproblem Java Basics - Anfänger-Themen 2
J OOP Kleines Schülerverwaltungsprogramm Java Basics - Anfänger-Themen 9
F Methoden Kleines Problem mit meinem Glücksrad... Java Basics - Anfänger-Themen 9
N ein kleines GUI mit einem hauch XML Java Basics - Anfänger-Themen 5
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
K Ein kleines Rätsel Java Basics - Anfänger-Themen 2
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
A Best Practice Ideen für kleines Anfängerschulprojekt gesucht Java Basics - Anfänger-Themen 4
J kleines Karteikartenprogramm Java Basics - Anfänger-Themen 3
S Kleines Zeichen berechnen Java Basics - Anfänger-Themen 5
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
H Kleines Prob Java Basics - Anfänger-Themen 5
J Vererbung Kleines Problem bei Vererbung! Java Basics - Anfänger-Themen 2
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
J Flaechen vergleichen/kleines Fehler? Java Basics - Anfänger-Themen 23
H Kleines Problem bei den Schleifen Java Basics - Anfänger-Themen 5
M Kleines Problem mit der Rekursion Java Basics - Anfänger-Themen 20
K Kleines Projekt Java Basics - Anfänger-Themen 2
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
J Mal wieder ein kleines Toleranzproblem Java Basics - Anfänger-Themen 20
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
T kleines problem mit switch case Java Basics - Anfänger-Themen 11
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
R Login mit Datenbankabfrage: Kleines Problem! Java Basics - Anfänger-Themen 6
K Kleines Anfänger Problem bei der Abfrage Java Basics - Anfänger-Themen 8
X Kleines JMenuBar Problem Java Basics - Anfänger-Themen 8
D Kleines Abfrageproblem Java Basics - Anfänger-Themen 3
K kleines Rekursionsproblem Java Basics - Anfänger-Themen 7
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
B Suche kleines Java-Applet Java Basics - Anfänger-Themen 6
P Kleines Problemm mit einer NullPointerException Java Basics - Anfänger-Themen 2
R kleines Kunstprogramm "mkbox" perfektionieren Java Basics - Anfänger-Themen 13
P wahrscheinlich ein kleines Problem Java Basics - Anfänger-Themen 7
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9
K Kleines Spiel / Daten speichern Java Basics - Anfänger-Themen 8
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
K kleines Array-Problem Java Basics - Anfänger-Themen 6
C Kleines 2D Spiel. Problem. Java Basics - Anfänger-Themen 5
T Kleines Verständnissproblem mit Regex Java Basics - Anfänger-Themen 4
U Kleines Problem mit Konstruktor^^ Java Basics - Anfänger-Themen 7
S Kleines Kartenspiel mit Java Java Basics - Anfänger-Themen 2
D kleines Eclipse-Problem ! Java Basics - Anfänger-Themen 2
I Kleines Program, fehler? Java Basics - Anfänger-Themen 2
S kleines Würfelspiel Java Basics - Anfänger-Themen 10
0 Frage zu Architektur: Server eines kleines Spiels Java Basics - Anfänger-Themen 4
C kleines Menü erzeugen und anzeigen Java Basics - Anfänger-Themen 11
S Kleines TickTackTou Java Basics - Anfänger-Themen 10
O Kleines Problem mit Konstruktor mit Parametern aus generischer Klasse...oder so ;) Java Basics - Anfänger-Themen 2
M Kleines Problem mit Threads (synchronized) Java Basics - Anfänger-Themen 3
J Java, kleines denkproblem. :) Java Basics - Anfänger-Themen 4
N Kleines Problemchen mit ButtonGroup Java Basics - Anfänger-Themen 2
W ein kleines Projekt! Aber wie beginnen Java Basics - Anfänger-Themen 4
S Kleines Problem... NaN, Infinity? Java Basics - Anfänger-Themen 9
B Drag and Drop fähige Trackliste..nurnoch ein kleines Problem Java Basics - Anfänger-Themen 16
G Kleines Problem mit File Java Basics - Anfänger-Themen 7
Z kleines projekt Java Basics - Anfänger-Themen 3
G ein kleines java prog - hat aber einen fehler-bitte um hilfe Java Basics - Anfänger-Themen 5
GambaJo Brauche Bewertung + Tipps für mein kleines Projekt Java Basics - Anfänger-Themen 4
N Nur ein kleines Installationsproblem . Java Basics - Anfänger-Themen 5
G Kleines Problem mit Nimmspiel Java Basics - Anfänger-Themen 8
U kleines problem bei ner aufgabe :( Java Basics - Anfänger-Themen 8
G Kleines Problem mit Array Java Basics - Anfänger-Themen 14
M DBCP - Kleines Beispiel Java Basics - Anfänger-Themen 3
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
G Kleines Problem Java Basics - Anfänger-Themen 3
D kleines script abhaengig von Ordner Bilder kopieren Java Basics - Anfänger-Themen 11
G Kleines Grundsatzproblem Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben