Also ich habe bei mir folgendes Problem, und zwar nutze ich folgende Quelltexte für jeden Button den ich bei mir in ein Frame einbinde:
Code:
import javax.swing.*;
private JButton button1 = new JButton();
this.add(button1);
button1.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent evt) {
button1ActionPerformed(evt); } });
public void button1ActionPerformed(final ActionEvent evt) {
//Hier kommt die Ereignisprozedur des Buttons rein
}
Wenn ich den oben Quellcode oben für jeden Button nehme dann erstellt Java ür jeden Button eine Klasse. Nun habe ich in meinem Spiel insgesamt 32 Buttons und die ganzen Klassen nerven so mit der Zeit. Kann man das nicht irgendwie so machen, dass Java nicht mehr für jeden Button eine extra Klasse macht?
public class ThreeButtons extends JFrame implements ActionListener {
JButton button1 = new JButton();
JButton button2 = new JButton();
JButton button3 = new JButton();
public ThreeButtons () {
super ("3 Buttons");
setLayout (new FlowLayout ());
getContentPane().add (button1);
getContentPane().add (button2);
getContentPane().add (button3);
button1.addActionListener (this);
button2.addActionListener (this);
button3.addActionListener (this);
}
public void actionPerformed (ActionEvent ae) {
//Hier dann implementieren was geschehen soll
// mit ae.getSource() kann bestimmt werden welches Objekt das ActionEvent erzeugt hat
}
public static void main (String[] args) {
ThreeButtons tb = new ThreeButtons();
tb.setSize (300,100);
tb.setVisible(true);
}
}
sollte gehen. habs jetzt aber nur so daher getippt
Dein Quellcode ist schon mal sehr nützlich, aber es ist bei mir so, dass, das ich bei mir auf dem Frame ein Null-Layout verwenden will und die Buttons an unterschiedlichen Stellen platziert habe.
Und dann noch die Frage, warum steht da bei allen Klassen "public" davor, reicht da nicht auch "privat"? Die Klasse mit den Buttons soll ja nicht von anderen Klassen verwendet werden!
Könnte mir jemand erklären wie ich das machen soll wenn ich Beispielsweise 3 Buttons habe:
Code:
public void actionPerformed (ActionEvent ae) {
//Hier dann implementieren was geschehen soll
// mit ae.getSource() kann bestimmt werden welches Objekt das ActionEvent erzeugt hat
}
Wie wende ich "ae.getSource()" an wie schreibe ich etwas wenn der eine Button etwas ausführen soll, z.B. der eine Button soll das hier ausführen "this.setTitle("Framename");"?
könnte das jemand ein wenig mehr verständlicher beschreiben? Ich habe halt bislang kaum Ahnung von dem graphischen Java, da ich bislang alles mit der DOS-Box gelöst habe.
Wie weise ich denn nun einem Button eine Aktion zu?
Wenn ich das mit dem Quelltext mache geht es nicht:
Code:
public void s1karte25ActionPerformed(ActionEvent evt) {
this.setTitle("Framename");
}
da er meldet, das er nicht mit den folgenden Quelltextzeilen arbeiten kann:
Code:
public class spiel extends JFrame implements ActionListener {
Das mit "equals" geht bei mir nicht, da ich keine Buttonbeschriftung habe! Statt der Buttonbeschriftung nehme ich Bilder, die jedoch immer bei dem Button varieren, da ich das so mache, das ich Buttons bei mir im Kartenspiel habe, die dann immer per Zufall mit Bildern von Karten bestückt werden. Kann man das nicht irgendwie über die Variable des Buttons statt mit der Beschriftung des Buttons lösen?
ich habe nun wie oben beschrieben meine Buttons angelgt. Nun besteht aber ein Problem, und ich weiß nicht woran es liegt. Mein Quelltext:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class game extends Frame implements ActionListener {
int x = 100;
private JButton s1karte[] = new JButton[4];
public game(String spielname) {
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}
});
this.setTitle(spielname);
this.setSize(800, 600);
this.setBackground(new Color(0, 127, 0));
this.setLayout(null);
this.setVisible(true);
this.setResizable(false);
for(int i=1; i<=4; i++){
s1karte[i].setBounds(x,50,80,110);
x += 20;
this.add(s1karte[i]);
s1karte[i].addActionListener(this);
}
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource().equals(s1karte[1])){
//Ereignisprozedur
}
if(ae.getSource().equals(s1karte[2])){
//Ereignisprozedur
}
if(ae.getSource().equals(s1karte[3])){
//Ereignisprozedur
}
if(ae.getSource().equals(s1karte[4])){
//Ereignisprozedur
}
}
public static void main(String[] args) {
new game("Kartenspiel");
}
}
Hat jemand eine Idee, was an meinen Buttons falsch ist? Darf man überhaupt sowas mit der For-Schleife machen, wo die Objekte mit add(button) eingefügt werden?