Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Konstruktur per ActionEvent an eine andere Methode übergeben
ich habe mal wieder ein kleines Problem mit Java, ich würder gerne mittels eines ActionListeners den Konstruktur "Interface" an eine Methode in einer anderen Klasse übergeben. Ich habe es bereits mit dem Zeiger "this" Probiert aber dann sagt mir Java das er Interace nicht auflösen kann. Mein Quellcode schaut bis jetzt so aus (leicht gekürtzt):
Code:
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
public class Interface
extends JFrame
implements WindowListener
{
// Erzeugung der Labels
private JLabel LNachname=new JLabel("Nachname: ");
[...]
// Erzeugung der Textfelder
JTextField TNachname=new JTextField(50);
[...]
// Erzeugung der Buttons
private JButton vorwaerts=new JButton(">>>");
[...]
// Konstruktur für das Interface
public Interface()
{
super("Adressverwaltung mit DB-Zugriff");
addWindowListener(this); // Hinzufügen des Windowslistener
[...]
// Vorwärtsblättern Button
verlassen.addActionListener(new ActionListener ()
{
public void actionPerformed(ActionEvent e)
{
db1.vorwaerts(??????????);
}
});
}
public void windowOpened(WindowEvent e) {}
// Schliessen des Fensters
public void windowClosing(WindowEvent e)
{
db1.schliessen();
dispose();
}
// Verlassen des Programms wenn das Fenster geschlossen ist
public void windowClosed(WindowEvent e)
{
System.exit(0);
}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
Ich wäre über einen entsprechendne Tipp sehr dankbar, da ich momentan keine Idee habe wie ich dieses Problem lösen könnte.
Gruß
Dan
das funktioniert zwar, aber ich bekommen dann in der Funktion die ich da aufrufe, keinen Zugriff auf die Formularfelder: :-(
Code:
// Methode zum Vorwärtsblättern
public void vorwaerts(Interface i3)
throws SQLException
{
// Neupositionieren des Zeigers falls am Ende der Liste
if(result.isLast())
{
result.first();
}
result.next(); // Lesen des nächsten Satzes
i3.TVorname.setText(result.getString("Vorname"));
i3.TNachname.setText(result.getString("Nachname"));
i3.TTelefon.setText(result.getString("Telefon"));
i3.TFax.setText(result.getString("Fax"));
i3.TeMail.setText(result.getString("eMail"));
i3.TStrasse.setText(result.getString("Strasse"));
i3.TPLZ.setText(result.getString("PLZ"));
i3.TOrt.setText(result.getString("Ort"));
}
Hättest Du vielleicht noch eine Idee, was ich noch falsch gemacht habe?
Gruß
Dan
Es kommt ganz darauf an, wie diese Felder deklariert wurden. Sind sie private geht das nicht. Eine Deklaration als public ist nicht zu empfehlen. Baue in Deine Klasse Interface entsprechende set() und get()-Methoden, die den Zugriff auf die Felder erlauben, ein. Diese Methoden deklarierst Du public, somit bekommst Du Zugriff über die Methoden auf die privaten Felder Deiner Klasse.
die felder waren eigentlich als public deklariert, aber die idee das alles in der Klasse public abzuwickeln ist vielleicht gar nicht so schlecht. Noch einmal vielen Dank für die schnelle Hilfe
Es macht nur Sinn, Methoden, auf die von "außen" zugegriffen werden soll, public zu deklarieren. Es kann natürlich in Deiner Klasse auch private Methoden geben, auf die nur von den public-Methoden zugegriffen wird. Instanzvariablen sind immer private zu deklarieren. So erreichst Du eine Abstufung der Zugriffsrechte auf die Daten Deiner Klasse.
Stimmt, auf jeden Fall. Sonst wird bei jedem Aufruf von db1.vorwaerts() eine neue Instanz angelegt. this zeigt einfach nur auf den Speicherbereich, in dem die Instanz von Deiner Klasse Interface liegt.
noch einmal vielen Dank für diese Umfangreiche Hilfe. Ich weiß zwar nicht ob das jetzt so ganz ellegant ist, aber ich habe das jetzt so gelöst das ich in der Klasse Datenbank die Daten aus Access in entsprechende "public"-Variablen lese und dann in der Klasse Interface mit einer entsprechenden Methode die Maske fülle bzw. die Maske auslese.