Autor Beitrag
LINUS19
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Mi 20.12.17 20:06 
Hallo,
wie bekomme ich es hin das die Koordinaten von der Maus an die paint methode übermittelt werden und erst dort gezeichnet wird( bei einem Frame)

Ich hatte das nämlich so gemacht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 class Maus extends MouseAdapter {                 
     public void mousePressed(MouseEvent event) {     
       
       Graphics g = getGraphics();             
       int px = event.getX();
       int py = event.getY();              
       g.setColor(Color.RED);                                               
       g.fillRect(((int)px/bx)*bx, ((int)py/hy)*hy, bx, hy); // Quadrate werden gefärbt bei Mausklick               
     }  
     }


Das Problem dabei ist aber das wenn man das Fenster verkleinert und dann wieder aufmacht, das die Quadrate dann nicht mehr gefärbt sind.

LG
LINUS19

Moderiert von user profile iconTh69: Titel geändert (war nur "Java GUI").
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 332
Erhaltene Danke: 47

Linux Raspbian, Win10
C, C++, Python, Java, JavaScript, Delphi7, Casio Basic
BeitragVerfasst: Mi 20.12.17 20:29 
Zitat:
Das Problem dabei ist aber das wenn man das Fenster verkleinert und dann wieder aufmacht, das die Quadrate dann nicht mehr gefärbt sind.
theoretisch brauchst du dafür ein 'OnResize' Event welches aufgerufen wird, wenn das Fenster skaliert wird. Ich empfehle mal danach zu suchen (zusammen mit deiner Grafik-lib logischerweise)

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2038
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 21.12.17 11:35 
Das lässt sich lösen wie hier im C# Beispiel.
Anstelle von Cursor.Draw() kommt deine Zeichen-Routine (.setColor() und .fillRect()).
Und statt Rectangle() kommt Point().

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Do 21.12.17 19:20 
Hallo,
Ich habe das ganze jetzt so gemacht, es funktioniert aber immer noch nicht. Auf die Klicks wird reagiert dann wird nämlich true ausgegeben, aber die Rechtecke werden immer noch nicht gefärbt.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
boolean clicked=false;
Point p=new Point();

public void paint(Graphics g) {
  
  
       if(clicked==true)
       g.setColor(Color.RED);                                                
      g.fillRect(((int)p.x/bx)*bx, ((int)p.y/hy)*hy, bx, hy);
   
   }

public void mousePressed(MouseEvent event) {     
      clicked=true;
      System.out.println(clicked); // Auf die Klicks wird reagiert                                 
       p.x=getX();
       p.y=getY();      
     repaint();         
       }
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2038
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 22.12.17 03:06 
Fast richtig. Es liegt nur an Kleinigkeiten:

ausblenden Java-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
private Point _pos = new Point();
private Boolean _clicked = false;
    
private void formMousePressed(java.awt.event.MouseEvent evt) {  
                              
    if (evt.getButton() == 1) {  // 1 = LMT 
        _pos.setLocation(evt.getPoint());  // .setLocation() nimmt die "X" und "Y" Koordinaten auf einmal auf
        _clicked = true;
    }

    repaint();
}                              

    
@Override  // die Methode muss überschrieben werden
public void paint(Graphics g) {

    super.paint(g);  // super.paint() malt erstmal alles andere auf dem Frame (wie sein Vorgänger), gefolgt vom Neuen ...
    if (_clicked) {
        g.setColor(Color.red);
        g.fillRect(_pos.x, _pos.y, 3030);  // zeichnet ein 30x30 px großes Rechteck in Rot
    }
}

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Fr 22.12.17 12:27 
Danke dir.
Hab nur noch 2 Fragen.
1 .Warum muss die Methode ùberschrieben werden?
2.Wieso formMousePressed, hab sonst nur MousePressed verwendet.

LG
LINUS19
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2038
Erhaltene Danke: 376

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 22.12.17 12:55 
1. Das JFrame stammt von der Frame-Klasse ab, und diese wiederum von der Window-Klasse. Darin wurde die paint() Methode zuletzt überschrieben. Liegt eine Methode überschrieben vor, muss sie mit der nächsten "Erweiterung" / Vererbung wieder überschrieben werden (sofern man sie verwenden möchte).
2. Die Methode formMousePressed() kann auch anders heißen. Ich hab sie direkt im Ereignis-Fenster des JFrame erstellt, und so ergab sich entsprechend der Name der Methode, weil mir die Entwicklungsumgebung diesen vorgeschlagen hat.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)