# Methoden implementieren?



## MädMäx (17. Dez 2009)

Hallo zusammen,

Ich programmiere erst seit Kurzem und dementsprechend auch erst seit Kurzem Java.

Wieso kann ich keine Methoden in der Klasse Oberflaeche aufrufen? Beispielsweise eine Check-Methode, ob der Benutzer eine richtige Eingabe gemacht hat (Rückgabewert boolean) und etwas solange ausgeführt wird, bis der boolean richtig ist? bspw: do { } while (boolean b == true)

Hier mein Code:


```
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

import javax.swing.JTextField;

public class Oberflaeche extends JFrame {
	{

		final JPanel zimmer;
		final JPanel person;
		final JCheckBox checkPartner;
		setTitle("Hotel von und zu Dynamo Dresden, hinterm Mond rechts");

		final JPanel panel = new JPanel();

		Toolkit toolkit;
		toolkit = getToolkit();
		Dimension size = toolkit.getScreenSize();
		add(panel);
		setSize(toolkit.getScreenSize());
		setLocation(size.width / 2 - getWidth() / 2, size.height / 2
				- getHeight() / 2);
		panel.setLayout(null);

		JTabbedPane contentPanel = new JTabbedPane();

		// Pannel erstellen
		zimmer = new JPanel();
		zimmer.setLayout(null);
		person = new JPanel();
		person.setLayout(null);

		JLabel ueberSchrift = new JLabel();
		ueberSchrift.setText("Hotel Dynamö Dresden");
		Font f18 = new Font("TimesRoman", Font.BOLD, 18);
		ueberSchrift.setFont(f18);
		ueberSchrift.setBounds(400, 10, 400, 50);
		zimmer.add(ueberSchrift);

		/*
		 * Textfelder für Person1 im Fenster Zimmer hinzufügen
		 */
		JTextField txfVorName = new JTextField("", 20);
		txfVorName.setBounds(200, 100, 200, 20);
		zimmer.add(txfVorName);
		System.out.println(txfVorName.getText());

		JTextField txfNachName = new JTextField("", 20);
		txfNachName.setBounds(200, 180, 200, 20);
		zimmer.add(txfNachName);

		JTextField txfGeschlecht = new JTextField("", 20);
		txfGeschlecht.setBounds(200, 260, 200, 20);
		zimmer.add(txfGeschlecht);

		JTextField txfGebDatum = new JTextField("", 20);
		txfGebDatum.setBounds(200, 340, 200, 20);
		zimmer.add(txfGebDatum);

		JTextField txfPartner = new JTextField("", 20);
		txfPartner.setBounds(200, 420, 200, 20);
		zimmer.add(txfPartner);

		/*
		 * Textfelder für Person2 im Fenster Person hinzufügen
		 */
		final JTextField txfVorName1 = new JTextField("", 20);
		txfVorName1.setBounds(500, 100, 200, 20);
		zimmer.add(txfVorName1);

		final JTextField txfNachName1 = new JTextField("", 20);
		txfNachName1.setBounds(500, 180, 200, 20);
		zimmer.add(txfNachName1);

		final JTextField txfGeschlecht1 = new JTextField("", 20);
		txfGeschlecht1.setBounds(500, 260, 200, 20);
		zimmer.add(txfGeschlecht1);

		final JTextField txfGebDatum1 = new JTextField("", 20);
		txfGebDatum1.setBounds(500, 340, 200, 20);
		zimmer.add(txfGebDatum1);

		final JTextField txfPartner1 = new JTextField("", 20);
		txfPartner1.setBounds(500, 420, 200, 20);
		zimmer.add(txfPartner1);

		/*
		 * Beschreibungen zu den Textfeldern erstellen - in Form von Labels
		 */
		JLabel vName = new JLabel("Vorname");
		vName.setBounds(100, 100, 80, 20);
		zimmer.add(vName);

		JLabel nName = new JLabel("Nachname");
		nName.setBounds(100, 180, 80, 20);
		zimmer.add(nName);

		JLabel lGeschlecht = new JLabel("Geschlecht w/m");
		lGeschlecht.setBounds(100, 260, 95, 20);
		zimmer.add(lGeschlecht);

		JLabel lGebDatum = new JLabel("Geburtsdatum");
		lGebDatum.setBounds(90, 340, 90, 20);
		zimmer.add(lGebDatum);

		JLabel lPartner = new JLabel("Partner");
		lPartner.setBounds(100, 420, 80, 20);
		zimmer.add(lPartner);

		/*
		 * Beschreibungen über den Spalten
		 */
		JLabel Person1 = new JLabel();
		Person1.setText("Erste Person");
		Person1.setBounds(250, 60, 200, 20);
		zimmer.add(Person1);

		JLabel Person2 = new JLabel();
		Person2.setText("Zweite Person");
		Person2.setBounds(550, 60, 200, 20);
		zimmer.add(Person2);

		/*
		 * Checkbox für das Abprüfen, ob Partner vorhanden
		 */
		checkPartner = new JCheckBox("Kommt der Partner mit?", false);
		checkPartner.setBounds(300, 500, 180, 30);
		zimmer.add(checkPartner);
		checkPartner.addActionListener(new ActionListener() {

			@SuppressWarnings("deprecation")
			public void actionPerformed(ActionEvent e) {

				/*
				 * sperrt die Textfelder in Spalte 2, falls Partner mitkommt und
				 * weist mit Farbe rot daraufhin
				 */
				if (checkPartner.isSelected()) {
					txfGebDatum1.enable(false);
					txfGeschlecht1.enable(false);
					txfNachName1.enable(false);
					txfPartner1.enable(false);
					txfVorName1.enable(false);
					txfGebDatum1.setBackground(Color.red);
					txfGeschlecht1.setBackground(Color.red);
					txfNachName1.setBackground(Color.red);
					txfPartner1.setBackground(Color.red);
					txfVorName1.setBackground(Color.red);
				} else {
					txfGebDatum1.enable(true);
					txfGeschlecht1.enable(true);
					txfNachName1.enable(true);
					txfPartner1.enable(true);
					txfVorName1.enable(true);
					txfGebDatum1.setBackground(Color.white);
					txfGeschlecht1.setBackground(Color.white);
					txfNachName1.setBackground(Color.white);
					txfPartner1.setBackground(Color.white);
					txfVorName1.setBackground(Color.white);
				}

			}
		});

		/*
		 * Button zum Einlesen der Dateien
		 */
		JButton doAction = new JButton("In Zimmer einbuchen");
		doAction.setBounds(500, 505, 180, 20);
		zimmer.add(doAction);

		doAction.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

			}
		});

		/*
		 * ----------------------------------------------------------------------
		 * -----------------------------------------------------
		 */

		JLabel ueberSchrift1 = new JLabel();
		ueberSchrift1.setText("Hotel Dynamö Dresden");
		ueberSchrift1.setFont(f18);
		ueberSchrift1.setBounds(400, 10, 400, 50);
		person.add(ueberSchrift1);

		/*
		 * Textfelder für Personen erstellen
		 */
		final JTextField ersVorName = new JTextField("", 20);
		ersVorName.setBounds(200, 100, 200, 20);
		person.add(ersVorName);

		final JTextField ersNachName = new JTextField("", 20);
		ersNachName.setBounds(200, 180, 200, 20);
		person.add(ersNachName);

		final JTextField ersGeschlecht = new JTextField("", 20);
		ersGeschlecht.setBounds(200, 260, 200, 20);
		person.add(ersGeschlecht);

		final JTextField ersGebDatum = new JTextField("", 20);
		ersGebDatum.setBounds(200, 340, 200, 20);
		person.add(ersGebDatum);

		JTextField ersPartner = new JTextField("", 20);
		ersPartner.setBounds(200, 420, 200, 20);
		person.add(ersPartner);

		JLabel erstellePerson = new JLabel();
		erstellePerson.setText("Details für Person");
		erstellePerson.setBounds(250, 60, 200, 20);
		person.add(erstellePerson);

		/*
		 * Beschreibungen für zu erstellende Person
		 */
		JLabel vName1 = new JLabel("Vorname");
		vName1.setBounds(100, 100, 80, 20);
		person.add(vName1);

		JLabel nName1 = new JLabel("Nachname");
		nName1.setBounds(100, 180, 80, 20);
		person.add(nName1);

		JLabel lGeschlecht1 = new JLabel("Geschlecht w/m");
		lGeschlecht1.setBounds(100, 260, 95, 20);
		person.add(lGeschlecht1);

		JLabel lGebDatum1 = new JLabel("Geburtsdatum");
		lGebDatum1.setBounds(90, 340, 90, 20);
		person.add(lGebDatum1);

		JLabel lPartner1 = new JLabel("Partner");
		lPartner1.setBounds(100, 420, 80, 20);
		person.add(lPartner1);

		JButton personErstell = new JButton("Erstelle Person!");
		personErstell.setBounds(200, 450, 190, 20);
		person.add(personErstell);
		setContentPane(contentPanel);
		setVisible(true);

		final ArrayList<Person> personen = new ArrayList<Person>();
		personErstell.addActionListener(new ActionListener() {

			@SuppressWarnings("deprecation")
			public void actionPerformed(ActionEvent e) {
				Person eingabePerson = new Person();
				eingabePerson.setNachName(ersNachName.getText());
				eingabePerson.setVorName(ersVorName.getText());
				eingabePerson.setGeschlecht(ersGeschlecht.getText());
				eingabePerson.setGebDatum(ersGebDatum.getText());
				personen.add(eingabePerson);
			}
		});

		// Tabs hinzufügen
		contentPanel.add("Person erstellen", person);
		contentPanel.add("Zimmer", zimmer);

	}
}
```

Sorry, wenn meine Fehlerbeschreibung oder Fragestellung etwas ungenau ist :/

Viele Grüße,
Maxi


----------



## ashanti (17. Dez 2009)

Hi,

wo ist denn deine main? In einer anderen Klasse?

gruß


----------



## MädMäx (17. Dez 2009)

Hallo ashanti, 

ja. Ich habe einen benutzerdefinierten Datentyp Person erstellt, deswegen auch im unteren Teil des Codes ArrayLists mit Personen - das nur am Rande.

in meiner Main ruf ich folgendes auf:

Oberflaeche frame = new Oberflaeche();
frame.show();

Danke im Voraus,
Grüße


----------



## javimka (17. Dez 2009)

Verstehe nicht, was nicht funktioniert. Hast du in deiner Methode vielleicht den Rückgabewert vergessen, also ein [c]return false;[/c] (oder true);

EDIT: Verwende nicht frame.show, sondern frame.setVisible(true). show() ist deprecated, sollest du nicht verwenden.


----------



## SlaterB (17. Dez 2009)

> do { } while (boolean b == true)

ist kein korrekter Code, ansonsten ist keine Frage ersichtlich, schon gar nicht was es mit den hunderten Zeilen Code zu tun hat

Zeile 262
eingabePerson.setNachName(ersNachName.getText());
kann man bestimmt löschen und es besteht immer noch das gleiche Problem, oder?


----------



## MädMäx (17. Dez 2009)

Ich will mir Methoden basteln, um Codestücke nicht x-mal wiederholen zu müssen.

angenommen:


```
public boolean check()
{
	return false;
}
```

rein fiktiv, nur um die Fehler aufzuzeigen: 

Multiple markers at this line
	- check cannot be resolved to a type
	- Syntax error on token "boolean", @ expected
	- Syntax error, insert "EnumBody" to complete BlockStatement
	- Syntax error, insert "enum Identifier" to complete 
	 EnumHeaderName

Sorry, dass ich mich so undeutlich ausdrücke - mir fehlt die Kompetenz irgendwie noch.

EDIT: Ich will Methoden selbst schreiben, sprich entweder in der Oberflaechen-Klasse oder ersatzweise woanders - wo ich aber trotzdem noch auf Inhalte in der Oberflaechen-Klasse zugreifen kann.

Gruß


----------



## ashanti (17. Dez 2009)

Hi,



> Wieso kann ich keine Methoden in der Klasse Oberflaeche aufrufen?



geht doch, hier ein Beispiel aus der Klasse Oberfläche:

```
Person2.setText("Zweite Person");
```

gibt dich mal ein Beispiel wie du das meinst oder zeig doch mal, wie du eine Methode aufrufst.
gruß


----------



## SlaterB (17. Dez 2009)

wenn Zeilen wie

```
public boolean check()
{
	return false;
}
```

zu lauter Fehlern führen, obwohl sie für sich richtig aussehen, dann oft weil sie an falscher Stelle stehen,
z.B. innerhalb einer anderen Methode, das geht nämlich nicht


----------



## ashanti (17. Dez 2009)

Hi,


> Ich will mir Methoden basteln, um Codestücke nicht x-mal wiederholen zu müssen.



dann fang doch mal damit an, die Menge an sich wiederholenden Labels in eine Methode zu fassen.
Wenn du mal eine Anwendung mit 100ten von Labels hast, dann wird das echt viel mit Arbeit...

```
JLabel[] lab;

String[] stringLabel ={"Hier", "kommen", "alle", "meine", "Labelbeschriftungen", "hinein"};

public JLabel[] erzeugeLabels(String stringLabelAufnahme)
{
  int i = stringLabelAufnahme.length;
  lab = new JLabel[i];
      for(int x = 0; x < i; x++)
         {
           lab[x] = new JLabel(stringLabelAufnahme[x]);
           }
     return lab;
}
```
Das gleiche kannst du auch mit deinen TextFields machen...

gruß


----------

