JButton: Unterschied zwischen den Versionen
K (→Ereignisverarbeitung) |
K |
||
Zeile 181: | Zeile 181: | ||
{{Fragen stellen}} | {{Fragen stellen}} | ||
− | [[Kategorie:Java]] | + | [[Kategorie:Java-CodeSchnipsel]] |
[[Kategorie:Swing]] | [[Kategorie:Swing]] | ||
+ | [[Kategorie:Tutorials (Java)]] |
Version vom 8. April 2018, 11:49 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.
Inhaltsverzeichnis
JButton mit Text
//Ein einfacher JButton
JButton button = new JButton("Funktion");
JButton mit Icon
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.
Am häufigsten kommen für JButtons die im Abschnitt ImageIcon beschriebenen Varianten in einem Java-Programm zum Einsatz.
Demnach kann ein Button so mit einem Icon versehen werden:
//Ein JButton mit Icon
ImageIcon icon = new ImageIcon(getClass().getResource("MeinIcon.png"));
JButton button = new JButton("Funktion", icon);
JButton mit Icon über dem Text
Damit ein JButton
das Icon über dem Text anzeigt ist folgender Code zu schreiben:
button.setVerticalTextPosition(SwingConstants.BOTTOM);
button.setHorizontalTextPosition(SwingConstants.CENTER);
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:
- Der ActionListener ist die Klasse, die auch den JButton einbettet
- Eine anonyme (innere) Klasse implementiert den ActionLister
- Eine normale Klasse implementiert den ActionListener
- Dem Button wird eine Instanz einer
AbstractAction
übergeben
Beispiel mit ActionListener
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!");
}
}
Beispiel mit anonymer (inneren) Klasse
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() {
public void actionPerformed(ActionEvent e) {
doSomething();
}
});
add(button);
}
private void doSomething() {
System.out.println("Button wurde geklickt!");
}
}
Beispiel mit normaler Klasse
Hier werden zwei von einander getrennte Klassen gebaut.
Ein JPanel, das den JButton enthält:
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!");
}
}
...und die Klasse, die den ActionListener
implementiert:
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();
}
}
Beispiel mit AbstractAction
Hier werden zwei von einander getrennte Klassen gebaut.
Ein JPanel, das den JButton enthält:
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!");
}
}
...und die Klasse, die AbstractAction
erweitert:
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();
}
}
Links
Fragen
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche uns im Byte-Welt-Forum
- Besuche unseren Chat
Wir helfen dir gerne!
Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!
Du musst angemeldet sein, um einen Kommentar abzugeben.