Aktion ausführen wenn Button geklickt wird

paradox.

Aktives Mitglied
Hallo,

befasse mich gerade mit GUI´s. Möchte jetzt dass eine Aktion ausgeführt wird und sich dann ein neues Fenster öffnet, wenn der Button den ich erstellt habe geklickt wird. Kann mir da bitte jemand weiterhelfen.

Folgender Programmcode von meinem Button:
Java:
		JButton btnCsvMittelsUrl = new JButton("CSV Datei mittels URL einlesen");
		btnCsvMittelsUrl.setBounds(220, 127, 210, 60);
		contentPane.add(btnCsvMittelsUrl);

Danke schon im voraus.
Grüße
 
Zuletzt bearbeitet:
Du musst dem Button einen ActionListener hinzufügen.

Am einfachsten funktioniert das ganze über eine annonyme Klasse:

Java:
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("Der Button wurde geklickt");
            }
        });

Der Code innerhalb der actionPerformed Methode wird dann beim Klick ausgeführt.
Hier würde auf der Konsole [c]Der Button wurde geklickt[/c] ausgegeben
 
wichtig ist das man zeitaufwändigen code innerhalb des listeners nicht im EDT lauf lassen darf sondern in einen extra thread auslagern muss ... sonst "freezed" die GUI
 
Erstmal danke, aber ich komm immernoch nicht ganz zurecht..
Hier noch mal mein jetziger Code
Java:
		JButton btnDateiausgabecsvLoeschen = new JButton("Dateiausgabe.csv l\u00F6schen");
		btnDateiausgabecsvLoeschen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			DateienLoeschen.DateiausgabeLoeschen();
			LoeschenErfolgreich.main(null);
			}
Ne Frage zu "LoeschenErfolgreich", rufe ich hier das neue Fenster so richtig auf oder ist das eher ungeschickt?


Java:
package Projekt;

import java.awt.BorderLayout;

public class LoeschenErfolgreich extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					LoeschenErfolgreich frame = new LoeschenErfolgreich();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public LoeschenErfolgreich() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblDateiausgabecsvWurdeErfolgreich = new JLabel("Dateiausgabe.csv wurde erfolgreich gel\u00F6scht!");
		lblDateiausgabecsvWurdeErfolgreich.setHorizontalAlignment(SwingConstants.CENTER);
		lblDateiausgabecsvWurdeErfolgreich.setBounds(0, 103, 434, 55);
		contentPane.add(lblDateiausgabecsvWurdeErfolgreich);
	}


}
 
Zuletzt bearbeitet:
Erstmal danke, aber ich komm immernoch nicht ganz zurecht..
Hier noch mal mein jetziger Code
Java:
		JButton btnDateiausgabecsvLoeschen = new JButton("Dateiausgabe.csv l\u00F6schen");
		btnDateiausgabecsvLoeschen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			DateienLoeschen.DateiausgabeLoeschen();
			LoeschenErfolgreich.main(null);
			}

Ne Frage zu "LoeschenErfolgreich", rufe ich hier das neue Fenster so richtig auf oder ist das eher ungeschickt?

Wär echt super wenn mir jemand sagen könnte was ich an dem oberen Code-Teil besser machen kann. Scheint mir etwas ungeschickt die komplette main von der anderen Klasse aufzurufen, nur damit ein anderes Fenster angezeigt wird.
 
Wär echt super wenn mir jemand sagen könnte was ich an dem oberen Code-Teil besser machen kann. Scheint mir etwas ungeschickt die komplette main von der anderen Klasse aufzurufen, nur damit ein anderes Fenster angezeigt wird.

dann mach es doch so wie es korrekt geht : neue klasse instanzieren und entsprechende methoden callen ... ist aber auch nichts anderes als main() zu callen ... nur das du halt bei deinem code die kontrolle verlierst ...

google dir mal noch n paar tutorials
 
dann mach es doch so wie es korrekt geht : neue klasse instanzieren und entsprechende methoden callen ... ist aber auch nichts anderes als main() zu callen ... nur das du halt bei deinem code die kontrolle verlierst ...

google dir mal noch n paar tutorials

Quasi hab ich dann nur in meiner Hauptklasse ne main-Methode, sonst überall nicht und dann ruf ich die Methoden einfach mit Klassenname.Methodenname auf oder?
 
Actionlistener kannst auf 4 Arten einbauen:

1. Wie oben mit der anonymen Klasse. Eignet sich gut wenn nix kompliziertes gemacht wird.
2. Als innere Klasse, also Klasse in Klasse. Eignet sich wenn man Zugriff auf Variablen der äußeren Klasse braucht und wenn man in keiner anderen Klasse den AL braucht.
3. Als eigene Klasse (Datei). Eignet sich immer, besonders wenn der Code länger wird.
4. Die .java Datei implementiert selbst das ActionListener Interface. Wenn du den ActionListener nicht in mehren Klassen brauchst.

2 und 3 sind gleich, nur dass man das eine in der gleichen Datei hat und das andere in einer eigenen.
Bei 2 und 3 schreibst du

Java:
public class bla implements ActionListener {

}

und lässt von Eclipse den Fehler beheben (fügt die Actiopnperformed Methode ein).
Da schreibst System.out.... und gibst irgendwas aus.

Wenn du dann irgendwo den Button erstellt hast, machst einfach:
Java:
deinButton.addActionListener(new bla()); // für Punkte 2 und 3
deinButton.addActionListener(this); // für 4

this zeigt auf die Klasse in der du grade schreibst.
 
Zuletzt bearbeitet:

Zurück
Oben