Seltsames Verhalten beim ButtonClick (ActionListener() )

Status
Nicht offen für weitere Antworten.

Admiral

Mitglied
Hallo zusammen,

ich bin in Sachen Java ein blutiger Anfänger und habe einfach mal mit einem gesetztem Ziel angefangen in die Materie einzusteigen. VHS-Kurs für Anfänger habe ich auch schon hinter mir 🙂
Bei einer Sache komme ich gerade ins stocken. Ziel ist es, bei einem Klick auch einen Button, soll eine Texfeld in eine DB gespeichert werden, so weit alles ok geht auch prima. Der Code für die Buttonaktion habe ich so erstellt:

Code:
public SwingDemo() {
		super("Datenbank"); 
		setSize(400, 120);
		setLocation(300, 300); 
		Container contentPane = getContentPane();
		contentPane.setLayout(new GridLayout(3, 2));
		LabelName = new JLabel("Name");
		LabelVorname = new JLabel("Vorname");
		LabelNix = new JLabel(""); 
		TextName = new JTextField();
		TextVorname = new JTextField();
		Button = new JButton("Speichern");

		Button.addActionListener(einfuegen);
		contentPane.add(LabelName);
		contentPane.add(TextName);
		contentPane.add(LabelVorname);
		contentPane.add(TextVorname);
		contentPane.add(LabelNix);
		contentPane.add(Button);

	}

	ActionListener einfuegen = new ActionListener() {
		public void actionPerformed(ActionEvent xx) {
			String Name = TextName.getText();

			try {
				Class.forName(DRIVER).newInstance();
				Connection connection = DriverManager.getConnection(URL);
				Statement statement = connection.createStatement();
				ResultSet resultSet = null;
				String INSERT = "INSERT INTO formulare2 (name) VALUES('"+Name+"') ";
				// statement.execute(CREATE_TABLE);
				statement.execute(INSERT);
				// statement.execute(DELETE);
				resultSet = statement.executeQuery(SELECT);
				while (resultSet.next()) {
					System.out.println(resultSet.getString("id") + ":"
							+ resultSet.getString("name"));
				}
				resultSet.close();

				statement.close();

			} catch (Exception ef) {
				System.out.println("Fehler?!" + ef);
				ef.printStackTrace();
			}
		}

Ich dachte also, beim Klick auf den Button führe die Aktion "einfuegen" aus - geht auch.
Aber ich hatte den Code für "Einfügen" vorher so geschrieben:
Code:
public void actionPerformed(ActionEvent ev) {
		// hier stand vorher die Aktion von: ActionListener einfuegen ....
} // Ende klick auf Button
Da ich aber mehrere Buttons erstellen wollte, dachte ich mir, ich müsste für jeden Button eine eigene Methode schreiben, eben wie "einfuegen".
Jedoch wenn ich die Zeilen mit "actionPerformed(ActionEvent ev)" (1-6) lösche und das Programm starte bekomme ich eine Fehlermeldung, lasse ich weiter compilieren läuft das Programm wie gewünscht und ohne ein Fehlerprotokoll. Wo ist der Fehler im Programm?
Der ganze Code:

Code:
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SwingDemo extends JFrame implements ActionListener {

	static final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";

	static final String URL = "jdbc:derby:derbydb;create=true";

	
	JLabel LabelName, LabelVorname, LabelNix;
	JTextField TextName, TextVorname;
	JButton Button;

	
	public SwingDemo() {
		super("Datenbank"); 
		setSize(400, 120);
		setLocation(300, 300); 
		Container contentPane = getContentPane();
		contentPane.setLayout(new GridLayout(3, 2));
		LabelName = new JLabel("Name");
		LabelVorname = new JLabel("Vorname");
		LabelNix = new JLabel(""); 
		TextName = new JTextField();
		TextVorname = new JTextField();
		Button = new JButton("Speichern");

		Button.addActionListener(einfuegen);
		contentPane.add(LabelName);
		contentPane.add(TextName);
		contentPane.add(LabelVorname);
		contentPane.add(TextVorname);
		contentPane.add(LabelNix);
		contentPane.add(Button);

	}

	ActionListener einfuegen = new ActionListener() {
		public void actionPerformed(ActionEvent xx) {
			String Name = TextName.getText();

			try {
				Class.forName(DRIVER).newInstance();
				Connection connection = DriverManager.getConnection(URL);
				Statement statement = connection.createStatement();
				ResultSet resultSet = null;
				String INSERT = "INSERT INTO formulare2 (name) VALUES('"+Name+"') ";
				// statement.execute(CREATE_TABLE);
				statement.execute(INSERT);
				// statement.execute(DELETE);
				resultSet = statement.executeQuery(SELECT);
				while (resultSet.next()) {
					System.out.println(resultSet.getString("id") + ":"
							+ resultSet.getString("name"));
				}
				resultSet.close();

				statement.close();

			} catch (Exception ef) {
				System.out.println("Fehler?!" + ef);
				ef.printStackTrace();
			}
		}
	};


	public void actionPerformed(ActionEvent ev) {
		// hier stand vorher die Aktion von: ActionListener einfuegen ....
	} // Ende klick auf Button

	
	public static void main(String[] args) {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			System.err.println("Couldn't use the system " + "look and feel: "+ e);
		}
		
		##
		JFrame frame = new SwingDemo();

		WindowListener l = new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		};
		frame.addWindowListener(l);
		frame.setVisible(true);
	}
}

Ich hoffe ich habe mein Problem verständlich rüberbringen können. 🙂

Vielen Dank im voraus.

Admiral
 
Also: Das Programm funktioniert mit der Methode "einfuegen" nur ohne Fehlermeldung wenn ich den Code:

Code:
public void actionPerformed(ActionEvent ev) {
      // hier stand vorher die Aktion von: ActionListener einfuegen ....
   } // Ende klick auf Button
stehen lasse, obwohl keine Anweisungen drin stehen. Lösche ich diese 3 Zeilen, hält der Compiler mit einer Warnung an und fragt ob ich fortfahren will, klicke ich auf Ja läuft das Programm tadellos. Irgendwelche Fehlerprotokolle erhalte ich aber nicht. Meine Frage ist nun warum ich diese 3 Zeilen stehen lassen muss ???:L

Gruß Admiral
 
Admiral hat gesagt.:
Also: Das Programm funktioniert mit der Methode "einfuegen" nur ohne Fehlermeldung wenn ich den Code:

Code:
public void actionPerformed(ActionEvent ev) {
      // hier stand vorher die Aktion von: ActionListener einfuegen ....
   } // Ende klick auf Button
stehen lasse, obwohl keine Anweisungen drin stehen. Lösche ich diese 3 Zeilen, hält der Compiler mit einer Warnung an und fragt ob ich fortfahren will, klicke ich auf Ja läuft das Programm tadellos. Irgendwelche Fehlerprotokolle erhalte ich aber nicht. Meine Frage ist nun warum ich diese 3 Zeilen stehen lassen muss ???:L

Gruß Admiral

du brauchst auch nicht Actionlistener zu implementieren. klar, dass der jframe dann nen actionperformed braucht.
also weg damit.
 
hoppla sorry 🙂 hab ne komischefehlermeldung beim antowrten bekommen.
 
Gast hat gesagt.:
hoppla sorry 🙂 hab ne komischefehlermeldung beim antowrten bekommen.

Die habe ich heute morgen auch einmal bekommen. Irgendetwas mit einem nicht-anklickbaren
Test "Debug-Mode" oder so.

Der Post wurde dennoch eingetragen 😀
 
Hah! 🙂 Wie's der Zufall so will, habe ich ihn bei Eintragen des vorherigen Posts wieder erhalten.

JavaForum hat gesagt.:
Ran into problems sending Mail. Response: 535 authorization failed (#5.7.0)

DEBUG MODE

Line : 40
File : /www0126/www.java-forum.org/de/includes/smtp.php

Kommt davon wenn ein Java-Forum mittels php-Software realisiert wird. 😎 :noe:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben