You are not logged in.

  • Login

1

Saturday, November 14th 2009, 8:03pm

Maus

Hallo Leute,
ich hab da mal ne frage:
Köntt ihr mir sagen was man bei blue j alles mit ner maus machen klann??
Also die Maus befehle??
Z.b ob man den linke Taste von der rechten unterscheiden kann??
ich hab Z.b gard das Problem das ein Mausklick als mehrere hundert angesehen wird.
Wieso??
:thumbsup: 8o :pinch: :whistling: :?: :?: :?: :?: :?: :?: :?:
Mfg Ödeee

2

Saturday, November 14th 2009, 10:22pm

Gewöhne dir bitte eine eine vernünftige Schreibweise an.
Dein Problem ist zu ungenau formuliert um dir zu helfen.

"ich hab Z.b gard das Problem das ein Mausklick als mehrere hundert angesehen wird."
Offenbar hast du ja schon etwas Code geschrieben. Kannst du den mal zeigen, so das man das Problem besser nachvollziehen kann?

3

Sunday, November 15th 2009, 12:17am

Hey !
Sorry für das Geschmiere grad, ich hatte es etwas eilig.
Also, ich schreib grad aus Spaß mit BlueJ ein Paint-ähnliches Programm:
Das klappt auch schon ganz gut:
Wenn ich aber die Linienbreite verändern will, indem man die Maus auf ein Feld dafür klickt,
erhöht oder verringert sich die Linienbreite viel zu schnell:
Wisst ihr, wie ich das ändern kann??
Mein Code bisher:

Java 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import sum.kern.*;
public class Paint
{   Bildschirm derBildschirm;
    BuntStift meinStift;
    Maus meineMaus;
    int Breite;
    int a1;
    public Paint()
    {
        derBildschirm = new Bildschirm(1000,550);
        meinStift = new BuntStift();
        meineMaus = new Maus();
        zeichneFelder();
        zeichneBild();
    }
  void zeichneFelder()
  {//Schwarzes Feld
        meinStift.hoch();
        meinStift.bewegeBis(500,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.SCHWARZ);
        meinStift.zeichneRechteck(50,50);
       //Rotes Fels 
        meinStift.hoch();
        meinStift.bewegeBis(550,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.ROT);
        meinStift.zeichneRechteck(50,50);
       // Oranges Feld
        meinStift.hoch();
        meinStift.bewegeBis(600,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.ORANGE);
        meinStift.zeichneRechteck(50,50);
       //Blaues Feld
        meinStift.hoch();
        meinStift.bewegeBis(650,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.BLAU);
        meinStift.zeichneRechteck(50,50);
       //Radierer 
        meinStift.hoch();
        meinStift.bewegeBis(700,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.WEISS);
        meinStift.zeichneRechteck(50,50);
        meinStift.bewegeBis(700,525);
        meinStift.setzeSchriftgroesse(10);
        meinStift.setzeFarbe(Farbe.SCHWARZ);
        meinStift.schreibeText("Radieren");
      //Cyanfarbenes Feld
        meinStift.hoch();
        meinStift.bewegeBis(750,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.CYAN);
        meinStift.zeichneRechteck(50,50);
      //Magentafarbenes Feld
        meinStift.hoch();
        meinStift.bewegeBis(800,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.MAGENTA);
        meinStift.zeichneRechteck(50,50);
      //Zahl-Feld
        meinStift.hoch();
        meinStift.bewegeBis(850,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.WEISS);
        meinStift.zeichneRechteck(50,50);
        meinStift.bewegeBis(860,537.5D);
        meinStift.setzeFarbe(Farbe.SCHWARZ);
        meinStift.setzeSchriftgroesse(35);
        String  breite= (new Integer(Breite)).toString();
        meinStift.schreibeText(breite);
      //Breiten-Feld-größer
        meinStift.hoch();
        meinStift.bewegeBis(900,500);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.SCHWARZ);
        meinStift.zeichneRechteck(50,25);
        meinStift.bewegeBis(900,525);
        meinStift.setzeFarbe(Farbe.WEISS);
        meinStift.setzeSchriftgroesse(10);
        meinStift.schreibeText("Größer");
      //Breiten-Feld-kleiner
      meinStift.hoch();
        meinStift.bewegeBis(900,525);
        meinStift.setzeFuellmuster(Muster.GEFUELLT);
        meinStift.setzeFarbe(Farbe.ROT);
        meinStift.zeichneRechteck(50,25);
        meinStift.bewegeBis(900,550);
        meinStift.setzeFarbe(Farbe.WEISS);
        meinStift.setzeSchriftgroesse(10);
        meinStift.schreibeText("Kleiner");
         }
    // Dienste
    public void zeichneBild()
    {a1=0;
      Breite = 10;
      zeichneFelder();
      meinStift.setzeFarbe(Farbe.WEISS);
        // Aktionsteil
  while (a1!=1)//!dieMaus.doppelKlick())
    {
        if (meineMaus.istGedrueckt())
        {if((meineMaus.hPosition()>=500)&&(meineMaus.vPosition()>=500)//Die Maus im schwarzen Feld
            &&(meineMaus.hPosition()<=550)&&(meineMaus.vPosition()<=550))
            {meinStift.setzeFarbe(Farbe.SCHWARZ);}
         if((meineMaus.hPosition()>=550)&&(meineMaus.vPosition()>=500)//Die Maus im roten Feld
            &&(meineMaus.hPosition()<=600)&&(meineMaus.vPosition()<=550))
            {meinStift.setzeFarbe(Farbe.ROT);}
         if((meineMaus.hPosition()>=600)&&(meineMaus.vPosition()>=500)//Die Maus im orangem Feld
            &&(meineMaus.hPosition()<=650)&&(meineMaus.vPosition()<=550))
            {meinStift.setzeFarbe(Farbe.ORANGE);}
         if((meineMaus.hPosition()>=650)&&(meineMaus.vPosition()>=500)//Die Maus im blauem Feld
            &&(meineMaus.hPosition()<=700)&&(meineMaus.vPosition()<=550))
            {meinStift.setzeFarbe(Farbe.BLAU);}   
         if((meineMaus.hPosition()>=700)&&(meineMaus.vPosition()>=500)//Die Maus im Radier-Feld
            &&(meineMaus.hPosition()<=750)&&(meineMaus.vPosition()<=550))
            {meinStift.setzeFarbe(Farbe.WEISS);}   
         if((meineMaus.hPosition()>=750)&&(meineMaus.vPosition()>=500)//Die Maus im Cyan-Feld
            &&(meineMaus.hPosition()<=800)&&(meineMaus.vPosition()<=550))
            {meinStift.setzeFarbe(Farbe.CYAN);}
         if((meineMaus.hPosition()>=800)&&(meineMaus.vPosition()>=500)//Die Maus im Magenta-Feld
            &&(meineMaus.hPosition()<=850)&&(meineMaus.vPosition()<=550))
            {meinStift.setzeFarbe(Farbe.MAGENTA);} 
          if((meineMaus.hPosition()>=900)&&(meineMaus.vPosition()>=500)//Die Maus im Größer-Feld
            &&(meineMaus.hPosition()<=950)&&(meineMaus.vPosition()<=525))
            {Breite++;
            zeichneFelder();} 
           if((meineMaus.hPosition()>=900)&&(meineMaus.vPosition()>=525)//Die Maus im Kleiner-Feld
            &&(meineMaus.hPosition()<=950)&&(meineMaus.vPosition()<=550))
            {Breite--;} 
          else{      
        meinStift.bewegeBis(meineMaus.hPosition(),meineMaus.vPosition());
        meinStift.setzeLinienBreite(Breite);
        meinStift.runter();
        }}
        else
        {meinStift.hoch();}
    } 
 
}}



Tut mir leid, dass der Code jetzt nicht farbig ist;klappt irgendwie nicht.
Ich hoffe ihr könnt jetzt verstehen,was mein Problem ist und mir helfen,

Mfg Ödeee

This post has been edited 1 times, last edit by "ödeee" (Nov 15th 2009, 12:25am)


4

Sunday, November 15th 2009, 12:44am

Ich hab deinen Code mal bunt gemacht. Dein Problem ist folgendes: Du fragst in einer While-Schleife ab ob die Maus sich in einem 4eck befindet und gedrückt ist und wenn ja dann machst du etwas. Nehmen wir an diese While-Schleife läuft locker 1000mal in der Sekunde. Wenn du also mit der Maus auch nur eine 10tel Sekunde auf eine Fläche drückst wird der Code schon 100mal ausgeführt. Beim Wechseln der Farbe ist das kein Problem (es ist vom Ergbnis egal wie oft man "meinStift.setzeFarbe(Farbe.ROT);" ausführt), aber beim verändern der Dicke halt schon (es ist halt nicht egal wie oft man "meinStift.runter();" hintereinander ausführt).

Zur Lösung: Ich meine dunkel zu erinnern, dass es in Java sogenannte ActionListener für die Maus gibt, die dich bei einem Klickereignis informieren.

5

Sunday, November 15th 2009, 9:44am

Soweit ich mich erinnere war die Maus bei dem komischen BlueJ eine Implementierung von MouseListener.
Baue dir doch eine Unterklasse von Maus und überschreibe die mouseClicked()-Methode. Die Methode wird genau dann aufgerufen wenn die Maus einmal geklickt hat. Damit brauchst du nicht mit der hässlichen Endlosschleife (schau mal deine Prozessorlast an, du belastet einen CPU die ganze Zeit für 100%) arbeiten. Diese ist nämlich schlicht falsch.

6

Sunday, November 15th 2009, 12:02pm

OK, danke ich werds mal so probieren;
danke nochma;)
Ich hab jetzt solange, bis ich das mit dem Mouselistener hab, erstmal notösung dafür gefunden

This post has been edited 1 times, last edit by "ödeee" (Nov 15th 2009, 12:08pm)


Social bookmarks