Koordinatengrafik mit Java
HomeAufgabenDruckenJava-Online

Button Events

Ein Button wird als Objekt der Klasse JButton instanziert und mit der Methode add() zum GPanel hinzugefügt. Da das GPanel zur Zeit des Hinzufügens des Buttons bereits auf dem Bildschirm dargestellt ist, muss man validate() aufrufen damit der Button erscheint.

Das Drücken eines Buttons wird als ein Ereignis aufgefasst, das eine Callbackmethode aufruft. Das Programm "wartet", bis ein Buttonevent ausgelöst wird. Dieser bewirkt eine Aktion und das Programm kehrt wieder in die Wartestellung zurück. Das Drücken des Buttons wird vom ActionListener registriert, der die Methode actionPerformed (ActionEvent e) aufruft.

Im ersten Beispiel werden die Buttons Start und Stop erzeugt. Beim Klicken auf Start wird das Zeichnen von zufällig positinierten roten Punkten gestartet, mit Stop wird der Vorgang gestopt und kann mit erneutem Klick auf Start wieder gestartet werden.

// ButtonEvent1.java

import ch.aplu.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color;

public class ButtonEvent1 extends GPanel
{
  private JButton startButton = new JButton("Start");
  private JButton stopButton = new JButton("Stop");
  private boolean zeichne = false;

  public ButtonEvent1()
  {

    startButton.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        zeichne = true;
      }
    });

    stopButton.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        zeichne = false;
      }
    });

    add(startButton);
    add(stopButton);
    validate();

    while (true)
    {
      while(zeichne)
      {
        move(Math.random()Math.random());
        color(Color.red);
        fillCircle(0.01);
        Console.delay(150);
      }
    }
  }


  public static void main(String[] args)
  {
    new ButtonEvent1();
  }
}
 

 

Der folgende Programmcode zeigt eine andere Lösungsmöglichkeit. Die beide Buttons haben die selbe Callbackmethode. Man erhält die Information, welcher Button gedrückt wurde, über den Parameter evt, mit dem man die Methode getSource() aufrufen kann. Diese Art ist insbesondere dann sinnvoll, wenn mehrere Buttons verwendet werden.
Der ActionListener ist in einer inneren Klasse MyButtonListener implementiert.

 

// ButtonEvent2.java

import ch.aplu.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.awt.Color;

public class ButtonEvent2 extends GPanel
{
  private JButton startButton = new JButton("Start");
  private JButton stopButton = new JButton("Stop");
  private boolean painting = false;

  public ButtonEvent2()
  {
    class MyButtonListener implements ActionListener
    {
      public void actionPerformed(ActionEvent evt)
      {
        Object source = evt.getSource();
        if (source == startButton)
          painting = true;
        if (source == stopButton)
          painting = false;
      }
    }

    MyButtonListener listener = new MyButtonListener();
    startButton.addActionListener(listener);
    stopButton.addActionListener(listener);

    add(startButton);
    add(stopButton);
    validate();

    while (true)
    {
      while(painting)
      {
        pos( Math.random()Math.random() );
        color(Color.red);
        fillCircle(0.01);
        Console.delay(200);
      }
    }
  }

  public static void main(String[] args)
  {
    new ButtonEvent2();
  }
}
 

 

Im dritten Beispiel kann die Anzahl Punkte, die gezeichnet werden sollen, in einem Textfeld eingegeben werden. Mit dem Start-Button wird das Zeichen ausgelöst.

// ButtonEvent3.java

import ch.aplu.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color;

public class ButtonEvent3 extends GPanel
{
  private double n;     // Anzahl Punkte
  private JLabel labelAnzahl = new JLabel("Anzahl Punkte eingeben: ");
  private JTextField textAnzahl = new JTextField(10);
  private JButton startButton = new JButton("Start");

  public ButtonEvent3()
  {

    startButton.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        zeichne();
      }
   });

    add(labelAnzahl);
    add(textAnzahl);
    add(startButton);
    validate();
  }
  
  private void zeichne()
  {
    String anzahl = textAnzahl.getText().trim();
    n = Double.parseDouble(anzahl);

    for (int i = 0; i < n; i++)
    {
      move( Math.random()Math.random()* 0.95 );
      color(Color.red);
      fillCircle(0.01);
    }
  }
  
  public static void main(String[] args)
  {
    new ButtonEvent3();
  }
}