2 Buttons einbauen [Java]?

...komplette Frage anzeigen

2 Antworten

In Bezug auf dein Beispiel unter Unkreatiiievs Antwort:

und wie könnte ich das in meinen code einfügen?

Ein 'einfaches einfügen' wäre zu leicht. Es geht hierbei darum, das Verständnis zu entwickeln.

Soweit du bereits begriffen hast, benötigst du einen ActionListener um Code auszuführen.

button.addActionListener(this);

In deinem Beispiel fügst du

den selben

ActionListener an

beide

Buttons an.

Es gibt mehrere 'Arten' einen Listener hinzuzufügen:

1. Du implementierst Actionlistener in deine Klasse und bist dann gezwungen die Methode: actionPerformed zu implementieren. (Trifft auf dein Beispiel zu).

Hierbei kannst du deiner Komponente den Actionlistener via: 

button1.addActionListener(this);

zuweisen.

Wobei sich "this" auf die aktuelle Instanz der Klasse bezieht, und es somit nur einen ActionListener gibt.*1

2. Du verwendest eine eigene Klasse(ähnlich wie bei 1), welche einen ActionListener implementiert weist diese dann als neue Instanz zu:

button1.addActionListener(new Test1());

Über weitere Klassen, lassen sich auch andere Funktionen hinterlegen:
z.B.:

button2.addActionListener(new Test2());

3. Du verwendest anonyme innere Klassen. Hierfür brauchst du nicht extra eine Klasse zu erstellen:

button1.addActionListener(new ActionListener() {

   @Override
   public void actionPerformed(ActionEvent event) {
    ...
   }
});

Und kannst so 'schnell' jedem Button ein Actionlistener anfügen, der unterschiedlich agiert. 

PS: Das Thema: "Lambda-Ausdruck" lasse ich explizit weg, da ich ich es persönlich für deinen aktuellen Wissensstand als Überforderung bewerten würde. Es ist letztendlich die 'Kurzschreibweise' von Option 3.

Welches GUI-Framework benutzt du denn?

FynnFynn1334 21.02.2017, 18:10

meinst du sowas wie Swing? 😓 bei bin noch sehr neu in der "Szene" wenn es das ist, ich benutze SWING

0
Unkreatiiiev 21.02.2017, 18:17
@FynnFynn1334

Ja, genau.

Bei Swing kannst du auf alle Container-Komponenten (JFrame, JPanel, ...) andere Komponenten setzen.

final JButton button1 = new JButton("Bla"); //Button 1
final JButton button2 = new JButton("Bla 2"); //Button 2

myFrame.add(button1);
myFrame.add(button2);

Die Funktionalität kannst du über sogenannte Listener hinzufügen.

final ActionListener clickListener = a -> {
System.out.println("Button geklickt!");
};

button1.addActionListener(clickListener); //Listener hinzufügen

Der Listener wird jedes mal benachrichtigt, wenn auf den entsprechenden Button geklickt wird.

2
FynnFynn1334 21.02.2017, 19:11
@Unkreatiiiev

und wie könnte ich das in meinen code einfügen? wundere dich bitte nicht wenn irgendwo etwas ist was nicht benutzt wird :D

package tests;


import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Event;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.*;
import java.util.Scanner;

public class test1 implements ActionListener {

int Zahl = 0; //anzahl der klicks
int tro = 0; //anzahl der trophäen
int upp = 0; //anzahl der upgrades
int multi = 1; //anzahl des multiplikators
int gameover = 90; //für den fall dass man ins - gerät
int mult = 0; //fürs anzeigen des multiplikators

private static final long serialVersionUID = 4115671399871871854L;

private static Scanner scannerVariable;

private static final String ich = "ich bin erwacht!"; //das war nur zum test
JButton button;
JTextArea textarea;
JCheckBox box;
JButton button2;

       

public static void main(String[] args) {

test1 tst = new test1();
tst.los();

}

public void los() {
JFrame frame = new JFrame();
button = new JButton("Klick mich!");
textarea = new JTextArea();
box = new JCheckBox();
button2 = new JButton();

button.addActionListener(this);
button2.addActionListener(this);

button.setSize(30, 90);
button.setContentAreaFilled(true);
button.getFont();
button.setSize(30,40);
button.setBackground(Color.DARK_GRAY);
button.setForeground(Color.CYAN);
textarea.setEditable(false);
textarea.setText("Sie haben " +Zahl +" klicks");
box.setText("AFK");
frame.getContentPane().add(BorderLayout.WEST,box);
frame.getContentPane().add(BorderLayout.NORTH,textarea);
frame.getContentPane().add(button);
frame.getContentPane().add(textarea);
frame.getContentPane().add(BorderLayout.EAST,button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, 300, 300);
frame.setTitle("Kleines Klicker Spiel");
frame.getContentPane().add(BorderLayout.SOUTH,button2);
button2.setText("Upgrade für 200 klicks kaufen?");
button.setIcon(null);
button2.setActionCommand("klicks");
frame.setVisible(true);

}

@Override
public void actionPerformed(ActionEvent arg) {
button.setText("Nochmal!");

if (upp==1000) {
System.out.println("Sie haben zum 1000 mal geupgradet!!!");
}

while (Zahl<0 && gameover==0) {
System.out.println("GAME OVER");
gameover=gameover-1;
Zahl=Zahl-10;
}
mult=multi+upp;
if (Zahl==99) {
System.out.println("Trophäe: 100 klicks");
button.setSize(30,40);
tro=tro +1;
multi=multi+1;
mult=multi;
System.out.println("Sie haben jetzt " +tro +" Trophäe(n)!");
System.out.println("Sie bekommen jetzt " +mult +" klicks per klick!");
System.out.println("");
}
if (Zahl==199) {
System.out.println("Trophäe: 200 und noch viel mehr!");
tro=tro+1;
System.out.println("Sie haben jetzt " +tro +" Trophäe(n)!");
System.out.println("");
}
if (Zahl==499) {
System.out.println("Trophäe: Die hälfte");
tro=tro+1;
System.out.println("Sie haben jetzt " +tro +" Trophäen!");
multi=multi+1;
mult=multi+upp;
System.out.println("Sie bekommen jetzt " +mult +" klicks per klick!");
System.out.println("");
}

Zahl=Zahl+multi;

textarea.setText("Sie haben " +Zahl +" klicks");

}

}
0
regex9 22.02.2017, 05:19
@FynnFynn1334

Indem du dir das Beispiel von Unkreatiiiev anschaust und auf deinen Fall anwendest.

Im Übrigen kannst du für neue ActionListener ebenso anonyme Klassen verwenden, wenn der Inhalt der actionPerformed-Methode im Programm einzigartig und nicht zu lang ist (ansonsten wäre es schlechter Stil / redundant).

new JButton(new AbstractAction("Here you write the name of your button") {
public void actionPerformed(ActionEvent ae) {
//do some stuff here
}
})

Oder:

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// do some stuff here
}
});

Noch kürzer als Lambda-Ausdruck (Java 8):

button.addActionListener(a -> {
// do some stuff here
});
2

Was möchtest Du wissen?