Klickzähler

tlattex

Mitglied
Moin Leute,
wollte nen simplen Mausklickzähler erstellen aber der will nicht hochzählen. :(

Java:
import java.awt.*;
import java.util.*;
import java.text.*;
import javax.swing.*;
import java.awt.event.*;

public class zaehlen extends JFrame{
   mCanvas m_malflaeche;
   int aktzahl=1;
   boolean spielende;
   long start;
   long ende;
   public static void main(String[] args){
 
     zaehlen fenster = new zaehlen("Klickzähler");
     fenster.pack();
     fenster.setSize(300,400);
   
     fenster.setVisible(true);

   }
 
   zaehlen(String titel){
     super(titel);
 
     setLayout(new BorderLayout());
     
     m_malflaeche = new mCanvas();
     add(m_malflaeche);
     Panel p = new Panel();
     JButton b1 = new JButton("!Press!");
     JButton b2 = new JButton("Restart");
  
     p.add(b1);
     p.add(b2);
     add(p,"North");
     add(new JLabel("" +aktzahl, SwingConstants.CENTER),"Center");

     JMenuBar menuleiste = new JMenuBar();
     
     JMenu menu1 = new JMenu("Programm");
     JMenuItem item1 = new JMenuItem("Programm beenden");
     
     menu1.add(item1);
     
     menuleiste.add(menu1);
     setJMenuBar(menuleiste);

    
     


     class AListener implements ActionListener{
       public void actionPerformed(ActionEvent e){
         String label; 
         label = e.getActionCommand();
         
         while(spielende== false){
         if(label.equals("Programm beenden")){
             System.exit(0);
         }


         if(label.equals("!Press!")){
            aktzahl++;
             m_malflaeche.repaint();
         }
         if(aktzahl == 1){
            start = System.currentTimeMillis();
            ende = start + 10000;
            m_malflaeche.repaint();
         }

         if(ende == System.currentTimeMillis()){
            spielende = true;
            m_malflaeche.repaint();
         }
                
         if(label.equals("Restart")){
            aktzahl=0;
            
            m_malflaeche.repaint();
         }
           m_malflaeche.repaint(); 
         }
       } 
   }

     b1.addActionListener(new AListener());
     b2.addActionListener(new AListener());
     item1.addActionListener(new AListener());
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

  }
 

 class mCanvas extends Canvas{
 
    mCanvas() {
      setBackground(Color.white);
    }

    public void paint(Graphics g){
       if(aktzahl ==0){
          return;
       }
    }
 }
}

weiß jemand worans liegen könnte?

Danke
 

JavaMeister

Gesperrter Benutzer
Eine Gameloop im EDT ist wohl nicht so Tricki, wie du schon gesehen hast, musst du überall repainten.

Zudem hast du die gleiche Gameloop 3x. Das ist wohl dann bissel viel.

Ich sehe, dass du aktzahl inkrementierst, aber dein Label wird nicht verändert. Deswgeen sieht es für dich aus, als ob die Variable nicht hochzählt.

In Java gibt es kein Call by Reference... Wovon du hier aber auszugehen scheinst.

Du siehst, es fehlen dir elementare Grundlagen. Die könnte man vorher ergoogeln. Siehe QualiX Spieletutorial, dass hier des öfteren empholen wird.
 

strußi

Top Contributor
Ein Vorschlag,

bau dir so was auf
frame
panel mit gridbaglayout
1 fläche zum klicken
1 JLabel/JTextField oder was auch immer um die anzahl anzuzeigen
2 deine buttons

panel. addActionlistener/mouselistener => Zählervariable hochzählen und auf deinem Ausgabenfeld anzeigen

grüße
 

Oben