Daten auslagern?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo Leute,

ich würde gerne von euch wissen ob es einen Sinn macht Array´s, die viele Daten enthalten in einer anderen Klasse zu schreiben?

Da ich noch nichts mit Datenbanken zu tun hatte, habe ich zur Zeit meine Array´s noch in der gleichen Klasse stehen, wie meine ComboBox, JTextArea (Instanzen) usw. Dadurch wirkt der Code sehr, sehr lang.

Ich könnte doch über setter und getter Methoden bzw. über den Konstruktor, denn ich in der Klasse aufrufe, indem sich meine Instanzen der ComboBox befinden benutzen. (Rufe Konstruktor A mit den Array´s in Klasse B auf, mit der ComboBox...)

Ich habe mir auch überlegt, eine eigene Klasse für mein JFrame zu bilden. Macht es denn überhaupt Sinn so viele Klassen zu bilden oder eher weniger? Wenn ja, warum, wenn nicht, warum??

Danke schon mal,

monet
 

Nicco

Mitglied
Hallo

es macht tatsächlich Sinn, eher viele, dafür kleine Klassen zu schreiben, da es zum Einen übersichtlicher wird und zum Anderen besser dem Prinzip der Objektorientierten Programmierung entspricht. Grundsätzlich gilt: eine Klasse - eine Aufgabe.

Gruss Nicco
 
G

Gast

Gast
Danke erstmal für die schnelle Antwort.

Klingt ganz gut, denn dann könnte ich ja die Klasse, z.B. mit meiner Arrayliste auch anderweitig einsetzen ohne alle setter und getter Methoden in einen Quellcode zu packen.
Stimmt, das macht es wirklich übersichtlicher, wenn ich so darüber nachdenke.

Vorher habe ich alles in eine Quellcode gepack und der wude echt lang.

Kann man auch z.B. ButtonEvent oder ItemEvent´s in einer eigenen Klasses schreiben?? Vielleicht ist die Frage etwas unglücklich formuliert aber ich bin noch nicht so lange dabei :)

Danke,

monet
 

Nicco

Mitglied
Genau - eines der stärksten Argumente der objektorientierten Programmierung ist die Wiederverwendbarkeit.

Ich weiss nicht genau, wie du das meinst mit den Events. Vielleicht hilft dir mein Beispiel etwas weiter worin ich ein kleines GUI mache und dann die Handler gleich implementiere... Um das mit dem Pilot musst du dich nicht kümmern, das brauchst du nicht und ich habe es deshalb auskommentiert.

Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class PilotTester extends JFrame implements KeyListener, ActionListener {

	static final String newline = System.getProperty("line.separator");

//	private static Pilot pilot;

	private static void createAndShowGUI() {
		// Create and set up the window.
		PilotTester frame = new PilotTester("PilotTester");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Set up the content pane.
		frame.addComponentsToPane();

		// Display the window.
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
//		pilot = new Pilot(new Motor(), new Motor());

		/* Use an appropriate Look and Feel */
		try {
			// UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
			// UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
			UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
		} catch (UnsupportedLookAndFeelException ex) {
			ex.printStackTrace();
		} catch (IllegalAccessException ex) {
			ex.printStackTrace();
		} catch (InstantiationException ex) {
			ex.printStackTrace();
		} catch (ClassNotFoundException ex) {
			ex.printStackTrace();
		}
		/* Turn off metal's use of bold fonts */
		UIManager.put("swing.boldMetal", Boolean.FALSE);

		// Schedule a job for event dispatch thread:
		// creating and showing this application's GUI.
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}

	JTextArea displayArea;

	JTextField typingArea;

	public PilotTester(String name) {
		super(name);
	}

	/** Handle the button click. */
	public void actionPerformed(ActionEvent e) {
		// Clear the text components.
		displayArea.setText("");
		typingArea.setText("");

		// Return the focus to the typing area.
		typingArea.requestFocusInWindow();
	}

	private void addComponentsToPane() {

		JButton button = new JButton("Clear");
		button.addActionListener(this);

		typingArea = new JTextField(20);
		typingArea.addKeyListener(this);

		// Uncomment this if you wish to turn off focus
		// traversal. The focus subsystem consumes
		// focus traversal keys, such as Tab and Shift Tab.
		// If you uncomment the following line of code, this
		// disables focus traversal and the Tab events will
		// become available to the key event listener.
		// typingArea.setFocusTraversalKeysEnabled(false);

		displayArea = new JTextArea();
		displayArea.setEditable(false);
		JScrollPane scrollPane = new JScrollPane(displayArea);
		scrollPane.setPreferredSize(new Dimension(375, 125));

		getContentPane().add(typingArea, BorderLayout.PAGE_START);
		getContentPane().add(scrollPane, BorderLayout.CENTER);
		getContentPane().add(button, BorderLayout.PAGE_END);
	}

	/*
	 * We have to jump through some hoops to avoid trying to print non-printing
	 * characters such as Shift. (Not only do they not print, but if you put
	 * them in a String, the characters afterward won't show up in the text
	 * area.)
	 */
	private void displayInfo(KeyEvent e, String keyStatus) {

		// You should only rely on the key char if the event
		// is a key typed event.
		int id = e.getID();
		String keyString;
		if (id == KeyEvent.KEY_TYPED) {
			char c = e.getKeyChar();
			keyString = "key character = '" + c + "'";
		} else {
			int keyCode = e.getKeyCode();
			keyString = "key code = " + keyCode + " ("
					+ KeyEvent.getKeyText(keyCode) + ")";
		}

		int modifiersEx = e.getModifiersEx();
		String modString = "extended modifiers = " + modifiersEx;
		String tmpString = KeyEvent.getModifiersExText(modifiersEx);
		if (tmpString.length() > 0) {
			modString += " (" + tmpString + ")";
		} else {
			modString += " (no extended modifiers)";
		}

		String actionString = "action key? ";
		if (e.isActionKey()) {
			actionString += "YES";
		} else {
			actionString += "NO";
		}

		String locationString = "key location: ";
		int location = e.getKeyLocation();
		if (location == KeyEvent.KEY_LOCATION_STANDARD) {
			locationString += "standard";
		} else if (location == KeyEvent.KEY_LOCATION_LEFT) {
			locationString += "left";
		} else if (location == KeyEvent.KEY_LOCATION_RIGHT) {
			locationString += "right";
		} else if (location == KeyEvent.KEY_LOCATION_NUMPAD) {
			locationString += "numpad";
		} else { // (location == KeyEvent.KEY_LOCATION_UNKNOWN)
			locationString += "unknown";
		}

		// displayArea.append(keyStatus + newline + " " + keyString + newline
		// + " " + modString + newline + " " + actionString
		// + newline + " " + locationString + newline);
		displayArea.append(keyStatus + " " + keyString
				+ Integer.toString((int) System.currentTimeMillis()) + newline);
		displayArea.setCaretPosition(displayArea.getDocument().getLength());
	}

	/** Handle the key pressed event from the text field. */
	public void keyPressed(KeyEvent e) {
		if (e.getKeyCode() == KeyEvent.VK_LEFT) {
//			pilot.keyLeftPressed();
		} else if (e.getKeyCode() == KeyEvent.VK_UP) {
//			pilot.keyForwardPressed();
		} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
//			pilot.keyRightPressed();
		} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
//			pilot.keyBackwardPressed();
		}
		displayInfo(e, "KEY PRESS: ");
	}

	/** Handle the key released event from the text field. */
	public void keyReleased(KeyEvent e) {
		if (e.getKeyCode() == KeyEvent.VK_LEFT) {
//			pilot.keyLeftReleased();
		} else if (e.getKeyCode() == KeyEvent.VK_UP) {
//			pilot.keyForwardReleased();
		} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
//			pilot.keyRightReleased();
		} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
//			pilot.keyBackwardReleased();
		}
		displayInfo(e, "KEY RELEA: ");
	}

	/** Handle the key typed event from the text field. */
	public void keyTyped(KeyEvent e) {
	}

}




Gruss Nicco
 
G

Gast

Gast
Hallo Nicco,

sieht es scharf aus der Code...aber noch etwas zu schwierig zum verstehen.

Dazu habe ich gleich mal eine Frage. Wenn Du einen ActionListener an eine Button-Instanz anmeldest, warum steht in der Klammer "this"?

Ich weiss z.B., dass this sich auf das aktuelle Objekt oder auf eine Variable, die von einer Lokalen verdeckt wird bezieht. Könnte man nicht eigentlich was anderes in die Klammer der ActionListener-Methode schreiben oder ist das immer so???

danke,

monet
 

Nicco

Mitglied
Nein muss nicht immer so sein. Das übergebene Objekt muss einfach eines einer Klasse sein, die das Interface ActionListener implementiert. In unserem Falle ist dies nun die Referenz auf PilotTester. So "weiss" dann der Button wen er "ansprechen" soll, wenn er gedrückt wurde. Somit wird dann die Methode actionPerformed(ActionEvent) dieses Objektes aufgerufen.

Gruss Nicco


edit: dazu dieses kleine beispiel

ButtonExample.java
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public final class ButtonExample extends JFrame implements ActionListener {
	public ButtonExample(String name) {
		super(name);
	}

	/** Handle the button click. */
	public void actionPerformed(ActionEvent e) {
		JOptionPane.showMessageDialog(this, "Knopf gedrückt!", "Titel",
				JOptionPane.INFORMATION_MESSAGE);
	}
}

GUICreator.java
Code:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class GUICreator {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}

	private static final void createAndShowGUI() {
		ButtonExample be = new ButtonExample("Button Example");
		be.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton button = new JButton("Test");
		button.addActionListener(be);
		be.getContentPane().add(button);
		be.pack();
		be.setVisible(true);
	}
}
 
G

Gast

Gast
Ach so, ist ja eigentlich klar, denn this zeigt ja auf das aktuelle Objekt. Wenn ich eine Button-Instanz aus einer anderen Klasse
ansprechen möchte, müsste ich dann den Klassennamen angeben und dann die Instanz.

Alles klar. danke schön Nicco!!

Aber ich habe noch zwei kleine Probleme.

1. Ich habe eine Klasse gebildet in der ich ein Hauptfenster erstellt habe.
Diese Klasse nenne ich "Rahmen". In der Klasse wird aber der
Klassennamen gelb unterkringelt und wenn ich mit dem Courser rübergehe bekommt ich folgendes zu sehen:

"The serializable class Rahmen does not declare a static final serialVersionUID field of type long"

was kann das bedeuten???

2. Ich möchte gerne ein Array z.B. das [3] in meine JMenu-Instanz einfügen, die sich aber nicht in der gleichen Klasse befindet, wie das Array. Ich habe in der Klasse des Array´s schon get-Methoden. Seltsamerweise erreiche ich aber aus einer anderen Klasse die Array´s. Ich bilde einfach eine Instanz der Anderen Klasse und rufe dann über meine Instanz die get-Methode auf und es klappt problemlos aber warum nicht bei JMenu???

ich weiss, so viel auf einmal, das geht nun wirklich nicht...oder doch??

Danke,

monet
 
G

Gast

Gast
Ich glaube, ich habe das Problem schon gelösst.

Es scheint mir aber etwas umständlich zu sein oder was meint ihr??

Bsp:
JMenu m1 = new JMenu();


Bmw_Daten m = new Bmw_Daten();//Instanz der //andern Klasse
String r = m.getWert_2(3);

m1.add(r);

Ich habe das Gefühl, dass es auch anders gehen könnte...hmm

danke,

monet
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Unvollständige Daten in der TableView Java Basics - Anfänger-Themen 8
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Daten in Echtzeit übernehmen Java Basics - Anfänger-Themen 5
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
H Passwortmanager, Sicherheit der Daten Java Basics - Anfänger-Themen 12
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
F Daten aus Excel-Tabelle in Java importieren Java Basics - Anfänger-Themen 15
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
W Best Practice problemabhängige Persistentmachung von Daten Java Basics - Anfänger-Themen 6
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
D Daten mit Apache POI in eine Excel Datei schreiben Java Basics - Anfänger-Themen 5
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
T printf Daten aus der Tabelle in Excel übernehmen Java Basics - Anfänger-Themen 5
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
V Einlesen von Daten Java Basics - Anfänger-Themen 8
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
J Daten im Programm speichern Java Basics - Anfänger-Themen 14
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
O Probleme mit CSV Daten Java Basics - Anfänger-Themen 10
M Arrays: Trennung von Daten und Darstellung Java Basics - Anfänger-Themen 1
S Daten aus Array in Klasse übertragen Java Basics - Anfänger-Themen 12
M Wie sicher sind Daten im Java Programm? Java Basics - Anfänger-Themen 9
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9
C Datei mit Daten einlesen und höchsten wert der zweiten Spalte ermitteln Java Basics - Anfänger-Themen 1
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
D Daten von einem int in einen string Java Basics - Anfänger-Themen 5
L Daten aus Array Feld löschen Java Basics - Anfänger-Themen 2
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5
IngoF GUI mit Thread Daten austauschen. Java Basics - Anfänger-Themen 6
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
fLooojava Daten im selben Netzwerk an IP Java Basics - Anfänger-Themen 1
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
P Daten auslesen und in CSV speichern Java Basics - Anfänger-Themen 6
J Daten aus zweiter Klasse importieren Java Basics - Anfänger-Themen 33
C Daten speichern und laden Java Basics - Anfänger-Themen 6
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
J Daten von einer PHP Datei ablesen Java Basics - Anfänger-Themen 1
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
K Daten (im Sinne von Datum) aus Webseiten extrahieren Java Basics - Anfänger-Themen 6
S Erste Schritte Tage zwischen 2 Daten berechnen Java Basics - Anfänger-Themen 6
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben