Programmierstil / Wann eine neue Datei?

Status
Nicht offen für weitere Antworten.

Bernasconi

Mitglied
Hallo.

Ich habe meine kleinen ersten Schritte bezüglich grafischer Obefläche gemacht. Ich bin ziemlich schnell mit Java an sich zurecht gekommen. Allerdings sieht mein Code von der strukturierung wohl eher nicht wie javacode aus. Er läuft zwar einwandfrei, allerdings glaube ich, dass der Code anders organisiert sein sollte.

Konkret spreche ich von:
- mehr Klassen, als diese die ich verwendet habe
- aufteilung in mehrere files
- vielleicht andere zugriff auf die befehle
- vorallem: mehr Funktionen?

Bin mir jetzt nicht sicher, allerdings denke ich, dass mein Code ziemlich sequenziell aussieht und was ich über Java gelesen habe, sollte das eher nicht so sein.

Ich will jetzt nicht genau alles über meinen Code im kleinsten Detail wissen, nur eine grobe Einschätzung anhand meines Beispiels wie man den Code besser gestalten könnte.

Klar gibt es Bücher. Aber die sind für mich etwas zu allgemein gehalten. Wenn ich hier mein ersten Beispiel analysieren lasse, habe ich bestimmt fürs Leben mehr davon. Denn das ist mein Stil und nicht der, der das Buch schreibt.

Ich hoffe ihr könnt meine Situation verstehen und mir helfen. Dankeschön.

PS: Ich erwarte keine Aufsätze, wenn vielleicht jeder der Lust hat etwas erwähnen würde, dann hätte ich bei einigen Antworten sicherlich schon genügend davon. wer natürlich will, darf tagelang analysieren ;)



Code:
package cdverwaltung;

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

public class Hauptfenster 
{

	JFrame form;
	MenuDateiBeendenListener menuDateiBeendenListener = new MenuDateiBeendenListener();
	MenuDateiOeffnenListener menuDateiOeffnenListener = new MenuDateiOeffnenListener();
	MenuDateiSpeichernListener menuDateiSpeichernListener = new MenuDateiSpeichernListener();
	MenuInfoAboutListener menuInfoAboutListener = new MenuInfoAboutListener();
		
	public Hauptfenster() 
	{
		super();
		
		form = new JFrame("CD-Verwaltung - © 2007 Claudio Bernasconi" );
		form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		form.setSize(800, 600);
		
		Toolkit toolkit = Toolkit.getDefaultToolkit();
	    Dimension d_aufloesung = toolkit.getScreenSize();
	    
	    form.setLocation( d_aufloesung.width / 2 - 400, d_aufloesung.height / 2 - 300 );

		//Menüeinträge DATEI
		JMenuItem menuDateiNeuerEintrag = new JMenuItem( "Neuer Eintrag...", new ImageIcon( getClass().getResource("icons/small/new.gif") ) );
		menuDateiNeuerEintrag.setAccelerator(KeyStroke.getKeyStroke('N',InputEvent.CTRL_MASK));
		JMenuItem menuDateiSuchen = new JMenuItem( "Suchen...", new ImageIcon( getClass().getResource("icons/small/find.gif") ) );
		menuDateiSuchen.setAccelerator(KeyStroke.getKeyStroke('F',InputEvent.CTRL_MASK));
		JMenuItem menuDateiOeffnen = new JMenuItem( "Öffnen...", new ImageIcon( getClass().getResource("icons/small/open.gif") ) );
		menuDateiOeffnen.setAccelerator(KeyStroke.getKeyStroke('O',InputEvent.CTRL_MASK));
		menuDateiOeffnen.addActionListener(menuDateiOeffnenListener);
		JMenuItem menuDateiSpeichern = new JMenuItem( "Speichern...", new ImageIcon( getClass().getResource("icons/small/save.gif") ) );
		menuDateiSpeichern.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_MASK));
		menuDateiSpeichern.addActionListener(menuDateiSpeichernListener);
		JMenuItem menuDateiBeenden = new JMenuItem( "Beenden" );
		menuDateiBeenden.setAccelerator(KeyStroke.getKeyStroke('Q',InputEvent.CTRL_MASK));
		menuDateiBeenden.addActionListener(menuDateiBeendenListener);
		
		//Menüeinträge EINSTELLUNGEN
		JMenuItem menuEinstellungenNummern = new JMenuItem( "Nummern...", new ImageIcon( getClass().getResource("icons/small/nummern.gif") ) );
		menuEinstellungenNummern.setAccelerator(KeyStroke.getKeyStroke("F5"));
		JMenuItem menuEinstellungenBetriebssysteme = new JMenuItem( "Betriebssysteme...", new ImageIcon( getClass().getResource("icons/small/system.gif") ) );
		menuEinstellungenBetriebssysteme.setAccelerator(KeyStroke.getKeyStroke("F6"));
		JMenuItem menuEinstellungenSpielKategorien = new JMenuItem( "Spiel Kategorien...", new ImageIcon( getClass().getResource("icons/small/spiel.gif") ) );
		menuEinstellungenSpielKategorien.setAccelerator(KeyStroke.getKeyStroke("F7"));
		JMenuItem menuEinstellungenFilmarten = new JMenuItem( "Filmarten...", new ImageIcon( getClass().getResource("icons/small/film.gif") ) );
		menuEinstellungenFilmarten.setAccelerator(KeyStroke.getKeyStroke("F8"));
		JMenuItem menuEinstellungenMusikrichtungen = new JMenuItem( "Musikrichtungen...", new ImageIcon( getClass().getResource("icons/small/musik.gif") ) );
		menuEinstellungenMusikrichtungen.setAccelerator(KeyStroke.getKeyStroke("F9"));
		
		//Menüeinträge INFO
		JMenuItem menuInfoHilfe = new JMenuItem( "Hilfe...", new ImageIcon( getClass().getResource("icons/small/help.gif") ) );
		menuInfoHilfe.setAccelerator(KeyStroke.getKeyStroke("F1"));
		JMenuItem menuInfoAbout = new JMenuItem( "About...", new ImageIcon( getClass().getResource("icons/small/about.gif") ) );
		menuInfoAbout.addActionListener(menuInfoAboutListener);
		
		//Mennübar einrichten
		JMenuBar mbar = new JMenuBar();
		
		//Menü DATEI einrichten
		JMenu menuDatei = new JMenu( "Datei" );
		menuDatei.setMnemonic('D');
		menuDatei.add(menuDateiNeuerEintrag);
		menuDatei.add(menuDateiSuchen);
		menuDatei.addSeparator();	//Trennstrich
		menuDatei.add(menuDateiOeffnen);
		menuDatei.add(menuDateiSpeichern);
		menuDatei.addSeparator();	//Trennstrich
		menuDatei.add(menuDateiBeenden);
		mbar.add(menuDatei);
		
		//Menü EINSTELLUNGEN einrichten
		JMenu menuEinstellungen = new JMenu( "Einstellungen" );
		menuEinstellungen.setMnemonic('E');
		menuEinstellungen.add(menuEinstellungenNummern);
		menuEinstellungen.add(menuEinstellungenBetriebssysteme);
		menuEinstellungen.add(menuEinstellungenSpielKategorien);
		menuEinstellungen.add(menuEinstellungenFilmarten);
		menuEinstellungen.add(menuEinstellungenMusikrichtungen);
		mbar.add(menuEinstellungen);
		
		//Menü INFO einrichten
		JMenu menuInfo = new JMenu( "Info" );
		menuInfo.setMnemonic('I');
		menuInfo.add(menuInfoHilfe);
		menuInfo.add(menuInfoAbout);
		mbar.add(menuInfo);
		
		//Menü dem Fenster hinzufügen
		form.setJMenuBar( mbar );
		
		//Fenster sichtbar machen
		form.setVisible(true);
	}
	
	class MenuDateiBeendenListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			System.exit(0);
		}
	}
	
	class MenuDateiOeffnenListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			FileDialog fdialog = new FileDialog(form, "Öffnen", FileDialog.LOAD);
			fdialog.setDirectory("C:\\Programme\\CD-Verwaltung\\");
			fdialog.setLocation(50,50);
			fdialog.setVisible(true);

			//Directory und Datei die ausgewählt wurden
			System.out.print( fdialog.getDirectory() );
			System.out.println( fdialog.getFile() );
			
			if( fdialog.getFile() != null )
			{
				//Prozess eine Datei zu laden

				JOptionPane.showConfirmDialog(form, "Datei geladen.",
    					"Geladen", JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE);			
			}
		}
	}
	
	class MenuDateiSpeichernListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			FileDialog fdialog = new FileDialog(form, "Speichern", FileDialog.SAVE);
			fdialog.setDirectory("C:\\Programme\\CD-Verwaltung\\");		    
			fdialog.setVisible(true);

			//Directory und Datei die ausgewählt wurden
			System.out.print( fdialog.getDirectory() );
			System.out.println( fdialog.getFile() );
			
			if( fdialog.getFile() != null )
			{
				//Prozess eine Datei zu speichern
				
				JOptionPane.showConfirmDialog(form, "Datei gespeichert.",
    					"Gespeichert", JOptionPane.CLOSED_OPTION, JOptionPane.INFORMATION_MESSAGE);				
			}
		}
	}
	
	class MenuInfoAboutListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			Toolkit toolkit = Toolkit.getDefaultToolkit();
		    Dimension d_aufloesung = toolkit.getScreenSize();
			
		    ClassLoader cldr = this.getClass().getClassLoader(); 
		    ImageIcon icon = new ImageIcon(cldr.getResource("cdverwaltung/logo.gif"));
		    JLabel about = new JLabel( "<html>

CD-Verwaltung v. 1.0
© 2007 Claudio Bernasconi
All rights reserved.</p></html>", icon, JLabel.LEFT );
			
		    JDialog dialog = new JDialog(form, "About CD-Verwaltung", true );
			dialog.setSize(250,120);
			dialog.setLayout( new FlowLayout() );
			dialog.setLocation( d_aufloesung.width / 2 - 125, d_aufloesung.height / 2 - 60 );
			dialog.getContentPane().add(about);
			dialog.setResizable(false);
			dialog.setVisible(true);
		}
	}

	public static void main(String[] args) 
	{
		try 
		{
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e) 
        {
            e.printStackTrace();
        } 
        
		new Hauptfenster();
	}

}
 

Bernasconi

Mitglied
Anonymous hat gesagt.:
naja so schlect find ich das gar nicht. wie du selber sagts: die actionlistener evt. je in eine separate datei und schau die doch mal das sun swing tutorial bezüglich threads an:

http://java.sun.com/docs/books/tutorial/uiswing/concurrency/initial.html
Danke dir für deine Antwort.
In wie fern meinst du das mit den Threads? Ich kenne die Vorzüge der Threadprogrammierung.
Denkst du, dass sich das einsetzen von Threads bereits für die GUI lohnt? Ich setzte sie bis jetzt immer nur bei langen Berechnungen > 2s oder so, ca. ein.

Die Frage die ich mir immer stelle, ist die Anzahl der Threads die ich erstellen soll, und wie ich die Aufgaben aufsplitten soll. Auf jedenfall werde ich mir das Tutorial anschauen, nur ist mir leider das Ziel dieses Tutorials im Bezug auf mein Programm hier (spezifisch) nicht bekannt. Bitte um Erklärung (und Nachsicht).
 

Bernasconi

Mitglied
könnte mir jemand noch einen Tipp geben? Es kann doch nicht sein, dass ich als Java-Anfänger bereits perfekten Javacode schreibe, also so überheblich bin ich dann auch wieder nicht.
 
S

SlaterB

Gast
du hast doch schon lauter SubKlassen,
ob du die nun auslagerst oder nicht ist Geschmackssache

die anderen 100 Zeilen lassen sich kaum aufsplitten,
ich empfehle da noch eine kürzere Schreibweise, aus
Code:
JMenuItem menuDateiSpeichern = new JMenuItem( "Speichern...", new ImageIcon( getClass().getResource("icons/small/save.gif") ) ); 
menuDateiSpeichern.setAccelerator(KeyStroke.getKeyStroke('S',InputEvent.CTRL_MASK)); 
menuDateiSpeichern.addActionListener(menuDateiSpeichernListener); 
menuDatei.add(menuDateiSpeichern);
wird
Code:
createMenuItem(menuDatei. "Speichern...","icons/small/save.gif",
       KeyStroke.getKeyStroke('S',InputEvent.CTRL_MASK),menuDateiSpeichernListener);
oder gar
Code:
createMenuItem(menuDatei, "Speichern...","save", 'S',ctrl,menuDateiSpeichernListener);
wennn eine entsprechende Operation createMenuItem da ist

was übersichtlicher ist, ist wieder Geschmackssache
 

Murray

Top Contributor
Du initialisierst die Listener bei der Deklaration, den Frame aber im Konstruktor -> das würde ich einheitlich machen.

Teilweise wird die Ansicht vertreten, dass Methoden nicht mehr Code umfassen sollten als auf eine (Bildschirm-)Seite passt - dazu müssten man den Konstruktor in verschiedene Methoden aufteilen; das ist aber sicher Ansichtssache.

Ich würde vielleicht für den Aufbau der Menüs eine Hilfsmethode vorsehen, so wie Slater das vorgeschlagen hat.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Avalon Programmierstil beim Mocken Java Basics - Anfänger-Themen 45
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
K Sauberer Programmierstil? Java Basics - Anfänger-Themen 3
M Best Practice Programmierstil Graphen-A*-Suche Java Basics - Anfänger-Themen 5
F Erste Schritte Frage zum Programmierstil Java Basics - Anfänger-Themen 11
A OOP Fragen zu Programmierstil Java Basics - Anfänger-Themen 18
I Programmierstil Java Basics - Anfänger-Themen 64
E Richtiger Programmierstil ? Java Basics - Anfänger-Themen 51
M Sind ternäre Operatoren für einen guten Programmierstil wichtig ? Java Basics - Anfänger-Themen 10
M Programmierstil Java Basics - Anfänger-Themen 14
B Frage zu Programmierstil: sollte Hauptklasse nur main enthalten? Java Basics - Anfänger-Themen 6
G Guter Programmierstil? Java Basics - Anfänger-Themen 8
G Guter Programmierstil? Java Basics - Anfänger-Themen 4
D Programmierstil - Bei Vererbung welchen Typ benutzen? Java Basics - Anfänger-Themen 8
K guter Programmierstil Java Basics - Anfänger-Themen 3
C Programmierstil und OOP Java Basics - Anfänger-Themen 7
M Programmierstil Java Basics - Anfänger-Themen 17
D Programmierstil Java Basics - Anfänger-Themen 6
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
I Logik Zahlungsprozess - Wann Bestellobjekt anlegen? Java Basics - Anfänger-Themen 2
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
W Wann Rückgabewerte 0, 1, -1? Java Basics - Anfänger-Themen 27
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
K In andere Zahlensysteme umwandeln, wann klappt immer der Trick mit log? Java Basics - Anfänger-Themen 6
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
R Wie überprüfen wann der User online oder offline ist? Java Basics - Anfänger-Themen 5
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
M Best Practice Wann eine Methode schreiben ? Java Basics - Anfänger-Themen 14
K Warum funktioniert das und wann erden die Objektmethoden nun ausgeführt? Java Basics - Anfänger-Themen 7
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
M Wann PATH und wann JAVA_HOME in Windows System 7 setzen? Java Basics - Anfänger-Themen 2
M Wann final verwenden? Java Basics - Anfänger-Themen 5
M Wann eine Wrapper Klasse verwenden und wann einen primitiven Datentypen? Java Basics - Anfänger-Themen 8
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
E wann welche Konstanten verwenden? Java Basics - Anfänger-Themen 7
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
K Wann Vererbung und wann Interface verwenden? Java Basics - Anfänger-Themen 12
D Wann genau nutze ich ein solches Interface? Java Basics - Anfänger-Themen 3
K Wann genau brauche ich die Anweisung gleich null? Java Basics - Anfänger-Themen 10
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
S OOP Wann Proxies und Interfaces? Java Basics - Anfänger-Themen 3
P Threads Wann läuft es parallel ab ? Java Basics - Anfänger-Themen 4
C Variablen Wann werden Instanzvariablen initalisiert? Java Basics - Anfänger-Themen 10
P Java Stream, wann welche Stream verwenden? Java Basics - Anfänger-Themen 3
T Ab wann ist es ein großes Projekt? Java Basics - Anfänger-Themen 35
N Bessere Performance durch final: wann denn überhaupt? Java Basics - Anfänger-Themen 28
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
W Wann nutze ich "import"? Java Basics - Anfänger-Themen 12
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
H Wann ein Objekt der Programmklasse in main anlegen Java Basics - Anfänger-Themen 2
G Wann ist ein == Vergleich bei Gleitkommazahlen fahrlässig? Java Basics - Anfänger-Themen 8
T Wann for und wann while?? Java Basics - Anfänger-Themen 35
-horn- Wann wird alles NaN erzeugt? Java Basics - Anfänger-Themen 22
S Wann wird eine Klasse geladen? Java Basics - Anfänger-Themen 17
C this - wann verwende ich das? Java Basics - Anfänger-Themen 10
T Threads - Ab wann wirds Kritisch?! Java Basics - Anfänger-Themen 7
M Wann muss man eine Variable mit set-/get-Methoden in eine Bean schreiben? Java Basics - Anfänger-Themen 19
G field public/private wann Java Basics - Anfänger-Themen 11
GambaJo Ab wann neue Klasse erzeugen? Java Basics - Anfänger-Themen 2
G Wann Arrays, wann Collections? Java Basics - Anfänger-Themen 36
GambaJo Wann try.catch nutzen? Java Basics - Anfänger-Themen 11
B objekt wann als final deklarieren? Java Basics - Anfänger-Themen 2
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
K StringBuilder notwendig ab wann? Java Basics - Anfänger-Themen 42
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
N Wann und wie oft finalize Methode verwenden( überschreiben ) Java Basics - Anfänger-Themen 6
M wann, welche schleife Java Basics - Anfänger-Themen 3
M Ab wann ist die Datei sichtbar? Java Basics - Anfänger-Themen 3
G Herausfinden, wann mehrere Threads abgeschlossen sind Java Basics - Anfänger-Themen 3
G Überprüfen wann ein Dokument abläuft? Java Basics - Anfänger-Themen 3
N SAX, StAX, JDOM oder DOM , ab wann welches für XML Java Basics - Anfänger-Themen 14
M Wann ist ein Programm beendet? Java Basics - Anfänger-Themen 6
G Wann am besten getSize() aufrufen? Java Basics - Anfänger-Themen 6
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
M wann statische klassen? Java Basics - Anfänger-Themen 14
M Wann ist initialisieren sinnvoll? Java Basics - Anfänger-Themen 4
B Wann Comparator und wann Comparable Java Basics - Anfänger-Themen 6
R Wann benutzt man << oder >> ? Java Basics - Anfänger-Themen 2
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben