Hi Lucky2k7,
Grundsätzlich musst du erstmal verstehen, wie in Java auf Ereignisse (und dazu gehört auch der Buttonklick) verarbeitet werden. Dazu stehen dir sogenannte Events (Ereignisse) und Listener (Ereignisempfänger) zur Verfügung.
Wenn ein JButton gedrückt wird, löst dieser ein Ereigniss aus, genauer gesagt ein sogenanntes ActionEvent. Das alleine hilft dir jedoch noch nicht weiter, da du dem JButton auch noch mitteilen musst, wem er denn mitteilen soll, an wen das Ereignis gemeldet werden soll. An dieser Stelle kommt der Listener (Ereignissempfänger) zur Verfügung - genauer gesagt der ActionListener. Ein ActionListener ist dabei eine Klasse, die das Interface ActionListener implementiert und dann entsprechend reagiert.
Soweit mal zur Theorie, kommen wir zur Praxis.
Zuerst erstellen wir uns einen einfachen JFrame mit Main-Methode und einem Button:
Code:
package de.germo.gui.test;
import java.awt.Desktop;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DemoActionListener extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton = null;
/**
* This is the default constructor
*/
public DemoActionListener() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setContentPane(getJContentPane());
this.setTitle("Demo ActionListener");
this.setResizable(false); // Generated
this.setBounds(new Rectangle(0, 0, 300, 80)); // Generated
this.setVisible(true); // Generated
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJButton(), null); // Generated
}
return jContentPane;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(10, 20, 270, 21)); // Generated
jButton.setText("zu Tutorials.de"); // Generated
}
return jButton;
}
}
public static void main(String args[]) {
new DemoActionListener();
}
}
Als nächstes benötigen wir den ActionListener. Der Einfacheit halber soll das der JFrame selber werden:
Code:
public class DemoActionListener extends JFrame implements ActionListener
Das Interface verlangt dabei nach der Methode public void actionPerformed(ActionEvent e), also implementieren wir sie:
Code:
public void actionPerformed(ActionEvent e) {
}
Damit wäre die Implementierung des Actionlisteners auch schon abgeschlossen - wir können dem JButton nun den AcionListener zuweisen:
Code:
jButton.addActionListener(this);
Dies hat zur Folge, dass jedesmal, wenn der Button gedrückt wird, die Methode ActionPerformed aufgerufen wird. Im Prinzip würde das schon reichen, allerdings gibt es Probleme, wenn du auf deinem Frame mehrere Button hast, die unterschiedliche Aktionen ausführen sollen. Wir brauchen also noch eine Kennzeichnungsfunktion. Diese verbirgt sich im ActionEvent. Dieses hat unter anderem das Attribut actionCommand. Um dieses zu setzen, müssen wir dies dem JButton mitteilen:
Code:
jButton.setActionCommand("browse")
Das ActionCommand kann dabei ein beliebiger String sein. In der Methode können wir nun filtern und den entsprechenden Code ausführen:
Code:
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("browse")) {
try {
Desktop.getDesktop().browse( new URI("http://www.tutorials.de/") );
} catch (IOException e1) {
e1.printStackTrace();
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
}
}
So - und das war es eigendlich auch schon.
Anbei nochmal der komplette Quellcode:
Code:
package de.germo.gui.test;
import java.awt.Desktop;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DemoActionListener extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jButton = null;
/**
* This is the default constructor
*/
public DemoActionListener() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setContentPane(getJContentPane());
this.setTitle("Demo ActionListener");
this.setResizable(false); // Generated
this.setBounds(new Rectangle(0, 0, 300, 80)); // Generated
this.setVisible(true); // Generated
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJButton(), null); // Generated
}
return jContentPane;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(10, 20, 270, 21)); // Generated
jButton.setText("zu Tutorials.de"); // Generated
jButton.setActionCommand("browse"); // Generated
jButton.addActionListener(this);
}
return jButton;
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("browse")) {
try {
Desktop.getDesktop().browse( new URI("http://www.tutorials.de/") );
} catch (IOException e1) {
e1.printStackTrace();
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
}
}
public static void main(String args[]) {
new DemoActionListener();
}
}
Ich hoffe mal, dass das halbwegs verständlich war, ansonsten: einfach nochmal fragen ;-)
Gruss,
Manuel Kipke