In Netbean einen Button programmieren

Lucky2k7

Grünschnabel
Hallo Usergemeinde,

ich habe mir mit netbean ein JFrame Fenster angelegt. Auf dem Fenster habe ich ein swing Button angelegt.

Wie kann ich es machen, das wenn ich den Button drück ein neues Browserfenster öffnen mit einer URL die ich im Code hinterlegt habe.

mit diesem Code funktioniert es wenn ich nur dies in eine klasse stehen hab.

Code:
  package xxxx;

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

      public class Awt {


          public static void main(String[] args) throws IOException, URISyntaxException  {
  
        	  Desktop.getDesktop().browse( new URI("http://www.googel.de/") );
          }
   }

Thx

Lars
 
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
 
Hey mki_germo,

vielen Dank für deine Hilfe, das mit dem ActionListener hat wunderbar geklappt.

Java ist für mich totales Neuland aber so langsam komm ich ein bischen dahinter. Mein erstes Projekt soll einen art Suchmaschine werden. Ich hoffe das ist fürs erste nicht zu schwer.

Ich habe ja jetzt mein JFrame mit dem SuchenButton und einer Jcombobox.
Wie kann ich den nun einen Wert aus der Jcombobox an der URL hängen?

Ich hab schon viel gesucht aber irgendwie nichts sinvolles gefunden.

Hat vielleicht jemand ein ähnliches Programm an dem ich mich orientieren kann?

THX

Lars
 
Zurück