java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 19.02.2005, 23:20   #1 (permalink)
Rico
Nicht angemeldet
 
Fachbeiträge: n/a
Standard Buttons

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?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 01:58   #2 (permalink)
Stammbenutzer
Viertel Megabyte
 
Registriert seit: 15.10.2004
Fachbeiträge: 454
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Doch natürlich. Hier ein Beispiel

Code:
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
Bert Brenner ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 09:38   #3 (permalink)
Rico
Nicht angemeldet
 
Fachbeiträge: n/a
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!
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 10:34   #4 (permalink)
Rico
Nicht angemeldet
 
Fachbeiträge: n/a
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");"?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 10:46   #5 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 05.01.2005
Fachbeiträge: 2.430
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Kannst ja auch die "Beschriftung" holen zur Unterscheidung der Buttons, mit :

Code:
event.getActionCommand()
Da kannst du dann die einzelnen auch ganz leicht unterscheiden.
__________________
"If you wait for a complete and perfect concept to germinate in your mind,you are likely to wait forever"
DeMarco
mic_checker ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 11:55   #6 (permalink)
Nicht angemeldet
 
Fachbeiträge: n/a
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 {
Wie muss ich nun das heir anwenden: ?
Code:
event.getActionCommand()
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 11:58   #7 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 09.01.2004
Fachbeiträge: 980
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Code:
public void actionPerformed(ActionEvent ae){
    if(ae.getActionCommand().equals("Buttonbeschriftung")){
        //tu was...
    }
}
__________________
Mach dir keine Sorgen wegen der Computer – sollten sie allzu mächtig werden, laß sie einfach einen Ausschuß bilden und Konferenzen abhalten.
Campino ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 12:25   #8 (permalink)
Nicht angemeldet
 
Fachbeiträge: n/a
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?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 12:27   #9 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 09.01.2004
Fachbeiträge: 980
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Code:
public void actionPerformed(ActionEvent ae){
    if(ae.getSource().equals(button)){
        //tu was...
    }
}
__________________
Mach dir keine Sorgen wegen der Computer – sollten sie allzu mächtig werden, laß sie einfach einen Ausschuß bilden und Konferenzen abhalten.
Campino ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 21:01   #10 (permalink)
Nicht angemeldet
 
Fachbeiträge: n/a
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?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 21:52   #11 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 05.01.2005
Fachbeiträge: 2.430
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Code:
   if(ae.getSource().equals(s1karte[4])){
Arrays fangen an bei 0 zu zählen, dein Array kann 4 Elemente aufnehmen, demnach liegt s1karte[4] außerhalb der Array-Grenzen.
__________________
"If you wait for a complete and perfect concept to germinate in your mind,you are likely to wait forever"
DeMarco
mic_checker ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 22:14   #12 (permalink)
Nicht angemeldet
 
Fachbeiträge: n/a
das Problem besteht aber immer noch, wenn ich den Index vom Array ändere:

Code:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class test extends Frame implements ActionListener { 
  int x = 100; 
  private JButton s1karte[] = new JButton[3];
  
  public test(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=0; i<=3; 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[0])){
      //Ereignisprozedur 
    } 

    if(ae.getSource().equals(s1karte[1])){
      //Ereignisprozedur 
    } 

    if(ae.getSource().equals(s1karte[2])){
      //Ereignisprozedur 
    } 

    if(ae.getSource().equals(s1karte[3])){
      //Ereignisprozedur 
    } 
  } 
  
  public static void main(String[] args) { 
    new test("Kartenspiel");
  } 
}
Was mache ich falsch, und wo liegt der Fehler? Könnte jemand gleich den Quelltext richtig aufschreiben?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 23:06   #13 (permalink)
Nicht angemeldet
 
Fachbeiträge: n/a
Zitat: Anonymous
Code:
  private JButton s1karte[] = new JButton[3];
Willst du nun 3 Buttons oder 4? Wenn du 4 willst dann lass die 4 hier stehen

Zitat:
Code:
    for(int i=0; i<=3; i++){
      s1karte[i].setBounds(x,50,80,110); 
      x += 20; 
      this.add(s1karte[i]); 
      s1karte[i].addActionListener(this); 
    } 
  }
Was mache ich falsch, und wo liegt der Fehler? Könnte jemand gleich den Quelltext richtig aufschreiben?
Du deklarierst das Feld von Buttons, aber es fehlt so was wie:

Code:
for(int i = 0;i <= 3;i++) {
s1karte[i] = new JButton("Button "+i);
...
Du musst du Buttons auch richtig initialisieren...
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 20.02.2005, 23:09   #14 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 05.01.2005
Fachbeiträge: 2.430
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Btw. was ich (<- Gast) noch vergessen hab :
- Klassennamen werden groß geschrieben

Warum verwendest du eigentlich das null - Layout?

Mit den Änderungen sollte zumindest keine ArrayIndexOutOfBoundsException mehr auftauchen.

Hab jetzt auch den ActionListener getestet, er erkennt so richtig welcher Button gedrückt wurde.

Aber: Das Layout sieht so noch sehr "unschön" aus
__________________
"If you wait for a complete and perfect concept to germinate in your mind,you are likely to wait forever"
DeMarco
mic_checker ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 21.02.2005, 06:35   #15 (permalink)
Nicht angemeldet
 
Fachbeiträge: n/a
auch wenn es hier nicht in den Thread reinpasst, aber welches Laout ist dann am besten, wo man auch Bounds für Objekte setzen kann?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Buttons und awt? foxy Mobile Geräte 7 08.07.2008 11:02
Buttons J-Mee Softwareentwicklung 3 12.08.2007 09:56
2 Buttons Fragezeichenn Java Basics - Anfänger-Themen 6 20.03.2007 11:10
JSF Buttons mayer Allgemeines EE 3 08.08.2005 06:59
Buttons SchachFritz AWT, Swing, JavaFX & SWT 1 26.05.2005 08:21


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de