JButton: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
Zeile 3: Zeile 3:
  
  
==JButton mit Text==
+
=JButton mit Text=
 
<code=java>
 
<code=java>
 
//Ein einfacher JButton
 
//Ein einfacher JButton
Zeile 10: Zeile 10:
  
  
==JButton mit Icon==
+
=JButton mit Icon=
{{JAPI|JButtons}} können auch Bilder bzw. Icons haben, die eine Funktion etwas mehr illustrieren.
+
{{JAPI|JButton}}s können auch Bilder bzw. Icons haben, die eine Funktion etwas mehr illustrieren.
 
Zum Laden von Bildern gibt es in Java verschiedene Möglichkeiten, die im Artikel [[Grafikdateien laden und anzeigen (Java)]] beschrieben sind.
 
Zum Laden von Bildern gibt es in Java verschiedene Möglichkeiten, die im Artikel [[Grafikdateien laden und anzeigen (Java)]] beschrieben sind.
 
Am häufigsten kommen für JButtons die [http://wiki.byte-welt.net/wiki/Grafikdateien_laden_und_anzeigen_(Java)#ImageIcon hier] beschriebenen Varianten in einem Java-Programm zum Einsatz.
 
Am häufigsten kommen für JButtons die [http://wiki.byte-welt.net/wiki/Grafikdateien_laden_und_anzeigen_(Java)#ImageIcon hier] beschriebenen Varianten in einem Java-Programm zum Einsatz.
Zeile 22: Zeile 22:
 
</code=java>
 
</code=java>
  
==JButton mit Icon über dem Text==
+
=JButton mit Icon über dem Text=
Damit ein JButton das Icon über dem Text anzeigt ist folgender Code zu schreiben:
+
Damit ein {{JAPI|JButton}} das Icon über dem Text anzeigt ist folgender Code zu schreiben:
 
<code=java>
 
<code=java>
 
button.setVerticalTextPosition(SwingConstants.BOTTOM);
 
button.setVerticalTextPosition(SwingConstants.BOTTOM);
Zeile 29: Zeile 29:
 
</code=java>
 
</code=java>
  
==Links==
+
=Ereignisverarbeitung=
 +
Der Mausklick auf einen {{JAPI|JButton}} löst ein {{JAPI|ActionEvent}} aus, das nähere Informationen zum Ereignis enthält. Damit das funktioniert muss am JButton ein {{JAPI|ActionListener}} registriert sein.
 +
 
 +
Dabei unterscheiden wir zwischen den am häufigsten benutzen Varianten:
 +
1. Der ActionListener ist die Klasse, die auch den JButton einbettet
 +
2. Der ActionListener ist eine anonyme (innere) Klasse
 +
3. Der ActionListener ist eine normale Klasse
 +
3. Dem Button wird eine Instanz einer {{JAPI|AbstractAction}} übergeben
 +
 
 +
==Beispiel mit ActionListener==
 +
<code=java>
 +
import javax.swing.JPanel;
 +
import javax.swing.JButton;
 +
import java.awt.event.ActionListener;
 +
import java.awt.event.ActionEvent;
 +
 
 +
public class MyPanel extends JPanel implements ActionListener {
 +
  private JButton button;
 +
 
 +
  public MyPanel() {
 +
      button = new JButton("Klick mich!");
 +
      button.addActionListener(this);
 +
      add(button);
 +
  }
 +
 
 +
  public void actionPerformed(ActionEvent e) {
 +
      doSomething();
 +
  }
 +
 
 +
  private void doSomething() {
 +
      System.out.println("Button wurde geklickt!");
 +
  }
 +
}
 +
</code=java>
 +
 
 +
==Beispiel mit anonymer (inneren) Klasse==
 +
<code=java>
 +
import javax.swing.JPanel;
 +
import javax.swing.JButton;
 +
import java.awt.event.ActionListener;
 +
import java.awt.event.ActionEvent;
 +
 
 +
public class MyPanel extends JPanel {
 +
  private JButton button;
 +
 
 +
  public MyPanel() {
 +
      button = new JButton("Klick mich!");
 +
      button.addActionListener(new ActionListener(this) {
 +
 
 +
        public void actionPerformed(ActionEvent e) {
 +
            doSomething();
 +
        }
 +
 
 +
      });
 +
      add(button);
 +
  }
 +
 
 +
  private void doSomething() {
 +
      System.out.println("Button wurde geklickt!");
 +
  }
 +
}
 +
</code=java>
 +
 
 +
==Beispiel mit normaler Klasse==
 +
Hier werden zwei von einander unabhängige Klassen gebaut.
 +
 
 +
Ein JPanel, das den JButton enthält:
 +
<code=java>
 +
import javax.swing.JPanel;
 +
import javax.swing.JButton;
 +
 
 +
public class MyPanel extends JPanel {
 +
  private JButton button;
 +
 
 +
  public MyPanel() {
 +
      button = new JButton("Klick mich!");
 +
      button.addActionListener(new MyActionListener(this));
 +
      add(button);
 +
  }
 +
 
 +
  public void doSomething() {
 +
      System.out.println("Button wurde geklickt!");
 +
  }
 +
}
 +
</code=java>
 +
 
 +
...und die Klasse, die den {{JAPI|ActionListener}} implementiert:
 +
<code=java>
 +
import java.awt.event.ActionListener;
 +
import java.awt.event.ActionEvent;
 +
 
 +
public class MyActionListener implements ActionListener {
 +
  private MyPanel panel;
 +
 
 +
  public MyActionListener(MyPanel panel) {
 +
      this.panel = panel;
 +
  }
 +
 
 +
  public void actionPerformed(ActionEvent e) {
 +
      panel.doSomething();
 +
  }
 +
 
 +
}
 +
</code=java>
 +
 
 +
==Beispiel mit AbstractAction==
 +
Hier werden zwei von einander unabhängige Klassen gebaut.
 +
 
 +
Ein JPanel, das den JButton enthält:
 +
<code=java>
 +
import javax.swing.JPanel;
 +
import javax.swing.JButton;
 +
 
 +
public class MyPanel extends JPanel {
 +
  private JButton button;
 +
 
 +
  public MyPanel() {
 +
      button = new JButton(new MyAction("Klick mich!", this));
 +
      add(button);
 +
  }
 +
 
 +
  public void doSomething() {
 +
      System.out.println("Button wurde geklickt!");
 +
  }
 +
}
 +
</code=java>
 +
 
 +
...und die Klasse, die {{JAPI|AbstractAction}} erweitert:
 +
<code=java>
 +
import javax.swing.event.AbstractAction;
 +
 
 +
public class MyAction extends AbstractAction {
 +
  private MyPanel panel;
 +
 
 +
  public MyAction(String text, MyPanel panel) {
 +
      super(text);
 +
      this.panel = panel;
 +
  }
 +
 
 +
  public void actionPerformed(ActionEvent e) {
 +
      panel.doSomething();
 +
  }
 +
}
 +
</code=java>
 +
 
 +
=Links=
 
*[http://docs.oracle.com/javase/tutorial/uiswing/components/button.html Oracle - Swing Tutorial - How To Use JButtons?]
 
*[http://docs.oracle.com/javase/tutorial/uiswing/components/button.html Oracle - Swing Tutorial - How To Use JButtons?]
  
 
[[Kategorie:Java]]
 
[[Kategorie:Java]]
 
[[Kategorie:Swing]]
 
[[Kategorie:Swing]]

Version vom 24. September 2017, 11:19 Uhr

Buttons dienen in einer GUI dazu, um Benutzeraktionen in Programmreaktionen umzuwandeln.
Ein Benutzer klickt auf einen Button, das Programm führt die gewünschte Aktion aus.


JButton mit Text

<code=java> //Ein einfacher JButton JButton button = new JButton("Funktion"); </code=java>


JButton mit Icon

JButtons können auch Bilder bzw. Icons haben, die eine Funktion etwas mehr illustrieren. Zum Laden von Bildern gibt es in Java verschiedene Möglichkeiten, die im Artikel Grafikdateien laden und anzeigen (Java) beschrieben sind. Am häufigsten kommen für JButtons die hier beschriebenen Varianten in einem Java-Programm zum Einsatz.

Demnach kann ein Button so mit einem Icon versehen werden: <code=java> //Ein JButton mit Icon ImageIcon icon = new ImageIcon(getClass().getResource("MeinIcon.png")); JButton button = new JButton("Funktion", icon); </code=java>

JButton mit Icon über dem Text

Damit ein JButton das Icon über dem Text anzeigt ist folgender Code zu schreiben: <code=java> button.setVerticalTextPosition(SwingConstants.BOTTOM); button.setHorizontalTextPosition(SwingConstants.CENTER); </code=java>

Ereignisverarbeitung

Der Mausklick auf einen JButton löst ein ActionEvent aus, das nähere Informationen zum Ereignis enthält. Damit das funktioniert muss am JButton ein ActionListener registriert sein.

Dabei unterscheiden wir zwischen den am häufigsten benutzen Varianten: 1. Der ActionListener ist die Klasse, die auch den JButton einbettet 2. Der ActionListener ist eine anonyme (innere) Klasse 3. Der ActionListener ist eine normale Klasse 3. Dem Button wird eine Instanz einer AbstractAction übergeben

Beispiel mit ActionListener

<code=java> import javax.swing.JPanel; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent;

public class MyPanel extends JPanel implements ActionListener {

  private JButton button;
  public MyPanel() {
     button = new JButton("Klick mich!");
     button.addActionListener(this);
     add(button);
  }
  public void actionPerformed(ActionEvent e) {
     doSomething();
  }
  private void doSomething() {
     System.out.println("Button wurde geklickt!");
  }

} </code=java>

Beispiel mit anonymer (inneren) Klasse

<code=java> import javax.swing.JPanel; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent;

public class MyPanel extends JPanel {

  private JButton button;
  public MyPanel() {
     button = new JButton("Klick mich!");
     button.addActionListener(new ActionListener(this) {
        public void actionPerformed(ActionEvent e) {
           doSomething();
        }
     });
     add(button);
  }
  private void doSomething() {
     System.out.println("Button wurde geklickt!");
  }

} </code=java>

Beispiel mit normaler Klasse

Hier werden zwei von einander unabhängige Klassen gebaut.

Ein JPanel, das den JButton enthält: <code=java> import javax.swing.JPanel; import javax.swing.JButton;

public class MyPanel extends JPanel {

  private JButton button;
  public MyPanel() {
     button = new JButton("Klick mich!");
     button.addActionListener(new MyActionListener(this));
     add(button);
  }
  public void doSomething() {
     System.out.println("Button wurde geklickt!");
  }

} </code=java>

...und die Klasse, die den ActionListener implementiert: <code=java> import java.awt.event.ActionListener; import java.awt.event.ActionEvent;

public class MyActionListener implements ActionListener {

  private MyPanel panel;
  public MyActionListener(MyPanel panel) {
     this.panel = panel;
  }
  public void actionPerformed(ActionEvent e) {
     panel.doSomething();
  }

} </code=java>

Beispiel mit AbstractAction

Hier werden zwei von einander unabhängige Klassen gebaut.

Ein JPanel, das den JButton enthält: <code=java> import javax.swing.JPanel; import javax.swing.JButton;

public class MyPanel extends JPanel {

  private JButton button;
  public MyPanel() {
     button = new JButton(new MyAction("Klick mich!", this));
     add(button);
  }
  public void doSomething() {
     System.out.println("Button wurde geklickt!");
  }

} </code=java>

...und die Klasse, die AbstractAction erweitert: <code=java> import javax.swing.event.AbstractAction;

public class MyAction extends AbstractAction {

  private MyPanel panel;
  public MyAction(String text, MyPanel panel) {
     super(text);
     this.panel = panel;
  }
  public void actionPerformed(ActionEvent e) {
     panel.doSomething();
  }

} </code=java>

Links