Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

1

21.11.2015, 13:14

[Abgeschlossen][Java] Wieso funktioniert hier der MouseListener nicht ?

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public class Test{
    public static void main(String[] args){
        JFrame fenster = new JFrame("Flappys-Dream-remake_from_Me");
        fenster.setSize(550, 650);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setLocationRelativeTo(null);
        fenster.setVisible(true);
        
        Zeichnung zeichnung = new Zeichnung();
        fenster.add(zeichnung);
    }
}
 class Zeichnung extends JPanel {//Kann kein Mauslistener implementieren
    Rectangle bird;
    ActionListener action;
    MouseListener maus;
    int röhre = 450;
    boolean start = true;
    ArrayList<Rectangle> columns;
    Timer time;
    
    public void addColumn(boolean start){
        
        if(start){
            columns.add(new Rectangle(röhre, 0, 50, 200));
            columns.add(new Rectangle(röhre, 300, 50, 250));
        }
    }
        
    public void paintColumn(Graphics g, Rectangle column)
    {
        g.setColor(Color.green.darker());
        g.fillRect(column.x, column.y, column.width, column.height);
    }
    
    public void jump(){
        bird.y = bird.y -= 20;
    }
    
 public Zeichnung(){
     columns = new ArrayList<Rectangle>();
     bird = new Rectangle(180, 80, 20, 20);
     action = new ActionListener(){
         public void actionPerformed(ActionEvent e){
             if(bird.y <= 550){
             bird.y = bird.y +1;
             }
             if (start)             {
                    for (int i = 0; i < columns.size(); i++)
                    {
                        Rectangle column = columns.get(i);

                        column.x -= 1;
                    }
             }       
             repaint();
         }
     };
     
     maus = new MouseListener(){
            public void mouseClicked(MouseEvent e){
                jump();
                // nur ein kleiner Test

                int al = e.getX();
                System.out.println(al );
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                
            }

            @Override
            public void mouseExited(MouseEvent e) {
            
            }

            @Override
            public void mousePressed(MouseEvent e) {
                
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                
            }
     };
     
     addColumn(true);
     time = new Timer(10, action);
     time.start();
 }
 public void paintComponent(Graphics g){
     super.paintComponent(g);
     
     g.setColor(Color.BLUE);
     g.fillRect(0, 0, 550, 650);
     
     g.setColor(Color.ORANGE);
     g.fillRect(0, 550, 550, 100);
     
     for (Rectangle column : columns)
        {
            paintColumn(g, column);
        }
     
     g.setColor(Color.RED);
     g.fillRect(bird.x, bird.y, bird.width, bird.height);

 }
}

Alles läuft nur beim Klicken geschieht nichts.
Ich habe eine Instanz von MouseListener erzeugt, fehlt da noch etwas ?
Eine persönliche Code ergänzung wäre sehr hilfreich.
Danke schon mal

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Slenderguy« (27.11.2015, 14:15)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

21.11.2015, 13:17

Du sagst deinem Programm nirgendwo, dass es den MouseListener benutzen soll.

3

21.11.2015, 13:21

Du musst dem JPanel natürlich noch deinen Listener hinzufügen.

Quellcode

1
    addMouseListener(maus);


Woher soll der wissen, dass er diesen Listener benutzen soll?

Edit:
Zur Übersicht kannst du auch einen MouseAdapter benutzen.
Dieser implementiert schlicht MouseListener, MouseMotionListener, MouseWheelListener und EventListener und bietet damit die Möglichkeit gezielt einzelne Methoden zu überschreiben.

Quellcode

1
2
3
4
5
6
7
8
9
10
maus = new MouseAdapter(){
            @Override
            public void mouseClicked(MouseEvent e){
                jump();
                // nur ein kleiner Test

                int al = e.getX();
                System.out.println(al );
            }
    };


Muss nicht immer sinnvoll sein.. gerade wenn die "Mauslogik" umfangreicher wird, ist es vielleicht besser diese in mehrere Klassen aufzuteilen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »InselÄffchen« (21.11.2015, 13:29) aus folgendem Grund: Tipp zum MouseAdapter hinzugefügt.


Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

4

21.11.2015, 13:39

Danke, habe ich gemacht.
Ich habe blos nicht daran gedacht, weil man das beim ActionListener in den Zeitzähler(Timer) einbaut.
Beim MouseListener ja nur mit add();
Mit dem Mouseadapter werde ich mich erstmal nicht beschäftigen, weil ich es halt noch nicht brauche und deshalb leider nicht verstehen werde.

@InselÄffchen bist du mit der Android SDK gut vertraut ?

5

21.11.2015, 13:49

Der MouseAdapter macht auch nichts anderes, als die genannten Interfaces zu implementieren, die entsprechenden Methoden jedoch leer zu lassen (Link ).

Mit Android hab ich bisher auch nur etwas herumgespielt.
Aber stell deine Fragen dazu ruhig im Forum, hier gibts bestimmt einige die dort fitter sind :)

Slenderguy

Frischling

  • »Slenderguy« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Schleswig-Holstein

  • Private Nachricht senden

6

25.11.2015, 14:41

Ich Arbeite gerade an einem Code und bin seit gerstern voll am verzweifeln.
Der Folgende Code soll 1 Zufällige Zahlen raussuchen, aber nicht die selbe die schon mal gezogen wurde, solange diese Bedingung erfüllt ist(ich meine die While schleife), aber wie ich sehe ist diese Bedingung nicht erfüllt, trozdem wird sie aufgeführt.

Quellcode

1
2
3
int[] Zahl = new int[10];
int Zufall = 1;
int Anzahl = 5;

Quellcode

1
2
3
4
5
6
7
8
for(int Nr = 1; Nr <= Anzahl; Nr++){
        
        while(Zahl[Zufall] == 1){
            Zufall = (int)(Math.random()*9)+1;
        }
        Zahl[Zufall] = 1;
        
        System.out.println(Nr -1 + ". Zahl lautet = " +Zufall);

So würde ich es meiner Meinung nach schreiben aber das geht ja nicht:

Quellcode

1
2
3
4
5
6
7
8
for(int Nr = 1; Nr <= Anzahl; Nr++){
        
        while(Zahl[Zufall] != 1){
            Zufall = (int)(Math.random()*9)+1;
        }
        Zahl[Zufall] = 1;
        
        System.out.println(Nr -1 + ". Zahl lautet = " +Zufall);

Also da ist natürlich noch mehr Code vorhanden, aber was ich nicht verstehen kann ist das was in der While- Schleife steht.
Ich weiss ja was das heist.
Danke schonmal

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

7

25.11.2015, 14:47

Array Indices fangen bei 0 an...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

25.11.2015, 15:42

Kann man wohl so machen, ist aber nicht gerade sinnvoll. Besser wäre es eventuell die Menge der möglichen Zahlen festzulegen und dann immer eine dort raus zu fischen. Die Menge wird dadurch immer kleiner und jede Ziehung erfolgt nur einmalig auf der jeweiligen Restmenge. Bei vielen Zahlen rotiert der Zufallsgenerator sonst unnötig lange, bis er mal eine freie Zahl gefunden hat.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

25.11.2015, 16:04

Quatsch. Ob ich die Liste abbaue oder aufbaue, macht Speicher-technisch gar keinen Unterschied. Die Laufzeit wird aber durch mein Vorgehen drastisch reduziert (nämlich von polynomial auf linear). Alternativ kann man auch eine Liste mit allen möglichen Werten bauen, von vorn bis hinten jeden Index durchgehen und die Zahl am aktuellen Index mit der Zahl an einem anderen zufälligen Index tauschen. Auch selbes Speicherverhalten, auch minimale Laufzeit.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

25.11.2015, 16:11

Ich wüsste nicht, wo mein Vorgehen komplexer wäre als in einer Liste nach einer bereits existierenden Zahl zu suchen. Eher sogar das Gegenteil.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige