# Brauche Hilfe was soll ich tun



## EnderProgrammer (10. Feb 2017)

Der JButton automa funktioniert nicht und ich weis nicht was ich tun soll bräuchte da ein bisschen hilfe und wie kann ich kekse ++ alle paar Sekunden ausführen

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Timer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Game extends JFrame implements ActionListener {
JButton button12;
JButton automa;
JLabel label;
JLabel label2;
public Game(){
 //JLabel---------------------------------------------------------------------------------------------------------------
    label = new JLabel("0");
    label.setBounds(170, 5, 100, 80);
    this.add(label);
    label2 = new JLabel("Kekse");
    label2.setBounds(270, 5, 100, 80);
    this.add(label2);
 //JFrame---------------------------------------------------------------------------------------------------------------
    this.setTitle("Cookie Clicker");
    this.setSize(400, 500);
    this.setLayout(null);
   this.setResizable(false);
//JButton-------------------------------------------------
   Icon keks = new ImageIcon(getClass().getResource("Keks.jpg"));
   button12 = new JButton("Keks.jpg",keks);
  button12.setBounds(50, 70, 189, 200);
  this.add(button12);
  button12.addActionListener(this);
 automa = new JButton("Auto Lv.1");
 automa.setBounds(50, 300, 189, 50);
  this.add(automa);
  
 
}
public static void main (String[]args){
    Game bl = new Game();
       bl.setVisible(true);
}int kekse = 0;

public void actionPerformed(ActionEvent ae) {
  if(ae.getSource() == this.button12){
 
  kekse ++;
 
 String Ausgabe = "" + kekse;
 label.setText(Ausgabe);
 if(ae.getSource() == this.automa){
 System.out.println("Hallo");
  }}
  }
 
 
 
 
}
```
Danke Bin neu hier


----------



## Flown (10. Feb 2017)

Grundsätzlich verwende doch mal Code-Tags für Code: [code=java]//Java code here[/code]


----------



## EnderProgrammer (10. Feb 2017)

danke für den tipp soll ich nochmal fragen ??


----------



## Flown (10. Feb 2017)

Anmerkungen zu deinem Code?
- Benutze ordentliche Bezeichnungen für deine Variablen.
- Composition over Inheritance - Benutze Komponenten und leite nicht von JFrame ab, wenn du das Verhalten nicht verändern möchtest.
- Benutze für jeden Button einen eigenen Listener, erspart dir die Abfrage, was gerade gedrückt wurde (deswegen gibt es anonyme Klassen - die haben keinen State).
- Benutze einen DefaultCloseOperation für JFrame, sonst terminiert das gestartete Programm nicht.
- Reihe dein Programm in den UI-Thread mittels SwingUtilities.invokeLater ein.

Für die Zukunft:
- Benutze einen LayoutManager (nicht das null-Layout).
- Trenne Logik von der UI (sieh dir eventuell auch mal MVC an).

Dann könnte dein Programm auch so aussehen (nur der erste Teil von Verbesserungsvorschlägen):

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

public final class Game {
  private int kekse = 0;
 
  public static void start() {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        new Game();
      }
    });
  }
 
  private Game() {
    JFrame frame = new JFrame("Cookie Clicker");
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    frame.setSize(400, 500);
    frame.setLayout(null);
    frame.setResizable(false);
  
    JLabel label = new JLabel(Integer.toString(kekse));
    label.setBounds(170, 5, 100, 80);
    frame.add(label);
  
    JLabel cookieCountLabel = new JLabel("Kekse");
    cookieCountLabel.setBounds(270, 5, 100, 80);
    frame.add(cookieCountLabel);
  
    JButton cookieClickButton = new JButton("Keks.jpg");
    cookieClickButton.setBounds(50, 70, 189, 200);
    cookieClickButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        label.setText(Integer.toString(++kekse));
      }
    });
    frame.add(cookieClickButton);
  
    JButton levelButton = new JButton("Auto Lv.1");
    levelButton.setBounds(50, 300, 189, 50);
    levelButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        System.out.println("Hallo");
      }
    });
    frame.add(levelButton);
  
    frame.setVisible(true);
  }
 
  public static void main(String[] args) {
    Game.start();
  }
}
```

Achja der Fehler war, dass du den ActionListener zu dem Button nicht hinzugefügt hast.


----------



## EnderProgrammer (10. Feb 2017)

wieso markiert er es als falsch
Fehlermeldung:Syntax error, insert "}" to complete MethodBody


----------



## Flown (10. Feb 2017)

Keine Ahnung, weil du eine Klammer zu wenig irgendwo hast. Kopier doch das ganze nochmal in das Game.java file.


----------



## EnderProgrammer (24. Feb 2017)

wie kann ich den kekse++ alle paar Sekunden ausführen lassen


----------



## Harry Kane (24. Feb 2017)

Mit einer Instanz von javax.swing.Timer.


----------

