Verständnis-Problem

Status
Nicht offen für weitere Antworten.

muemmel_0811

Bekanntes Mitglied
Hi zusammen,

ich hab hier einen kleinen Beispiel-Code (lauffähig), der wirklich nur dazu dient, mein Problem hier hoffentlich zu lösen.
Also, ich hab ein JPanel, in dem ich 2 Bereiche (farblich hervorgehoben) definiert hab, wo auf einen Mausklick hin etwas geschehen soll.

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;

public class Test extends JFrame {
   FretBoard rahmen = new FretBoard();
   Test() {
      super();
      setLayout(new FlowLayout());
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().add(rahmen);
   }

   public class FretBoard extends JPanel {
      HashMap<Point, Integer> merker = new HashMap<Point, Integer>();
      DrawNote note = new DrawNote();
      CheckPoint check = new CheckPoint();
      CheckLabel checkL = new CheckLabel();
      int mouse_x, mouse_y;
      JLabel zeig = new JLabel();

      FretBoard() {
         setLayout(null);
         setBackground(Color.WHITE);
         setPreferredSize(new Dimension(210, 160));
         zeig.setText("Hallo");
         zeig.setBounds(40,100,50,30);
         zeig.setVisible(false);
         add(zeig);
         addMouseListener(new Maus());
      }

      public void update(Graphics g) {
         paintComponent(g);
      }
      public void paintComponent(Graphics g) {
         super.paintComponent(g);
         g.setColor(new Color(220,220,220));
         g.fillRect(30,20,80,50);
         g.setColor(new Color(213,234,255));
         g.fillRect(30,90,80,50);
         note.show(g);
      }


      public class DrawNote extends Point {
         private int x,y;
         DrawNote() {
         }
         DrawNote(int x_K, int y_K) {
            x = x_K;
            y = y_K;
         }
         public void show(Graphics g) {
            if(x == 0 && y == 0) {
            }
            else {
               Graphics2D g2 = (Graphics2D) g;
               g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
               Iterator it = merker.entrySet().iterator();
               while(it.hasNext()) {
                  Map.Entry entry = (Map.Entry)it.next();
                  Point mitte = (Point)entry.getKey();
                  float mp_x = (float) mitte.x;
                  float mp_y = (float) mitte.y;
                  int typ = (Integer)entry.getValue();
                  if(typ == 0) {
                     Ellipse2D.Float punkt = new Ellipse2D.Float(mp_x,mp_y,14.0f,14.0f);
                     g2.setColor(new Color(0,0,0));
                     g2.fill(punkt);
                  }
                  if(typ == 1) {
                     Ellipse2D.Float kreis = new Ellipse2D.Float(mp_x,mp_y,13.0f,13.0f);
                     g2.setColor(new Color(0,0,0));
                     g2.setStroke(new BasicStroke(2.0f));
                     g2.draw(kreis);
                  }
                  if(typ == 3) {
                     g2.setStroke(new BasicStroke(3.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
                     g2.setColor(new Color(0,0,0));
                     g2.drawLine(mitte.x+4,mitte.y+4,mitte.x+10,mitte.y+10);
                     g2.drawLine(mitte.x+4,mitte.y+10,mitte.x+10,mitte.y+4);
                  }
               }
            }
         }
      }
      class CheckPoint {
         private int mx;
         private int my;
         CheckPoint() {
         }
         CheckPoint(int mx, int my) {
            mx = mx;
            my = my;
            if(merker.get(new Point(mx,my)) != null) {
               int typ = merker.get(new Point(mx,my));
               if(typ == 0) {
                  merker.put(new Point(mx,my),1);
                  note = new DrawNote(mx,my);
                  repaint();
               }
               if(typ == 1) {
                  merker.put(new Point(mx,my),3);
                  note = new DrawNote(mx,my);
                  repaint();
               }
               if(typ == 3) {
                  merker.put(new Point(mx,my),2);
                  note = new DrawNote(mx,my);
                  repaint();
               }
               if(typ == 2) {
                  merker.remove(new Point(mx,my));
                  repaint();
               }
            }
            if(merker.get(new Point(mx,my)) == null) {
               merker.put(new Point(mx,my),0);
               note = new DrawNote(mx,my);
               repaint();
            }
         }
      }

      class CheckLabel {
         private int mx;
         private int my;
         CheckLabel() {
         }
         CheckLabel(int mx, int my) {
            mx = mx;
            my = my;
            if(merker.get(new Point(mx,my)) != null) {
               int typ = merker.get(new Point(mx,my));
               if(typ == 88) {
                  zeig.setVisible(false);
                  merker.remove(new Point(mx,my));
               }
            }
            if(merker.get(new Point(mx,my)) == null) {
               merker.put(new Point(mx,my),88);
               zeig.setVisible(true);
            }
         }
      }

      class Maus extends MouseAdapter {
         public void mousePressed(MouseEvent me) {
            mouse_x = me.getX();
            mouse_y = me.getY();
            int mx;
            if(20 < mouse_y && mouse_y < 70) {
               int my = 50;
               if((30 < mouse_x && mouse_x < 110)) {
                  mx = 70;
                  check = new CheckPoint(mx,my);
               }
            }
            if(90 < mouse_y && mouse_y < 140) {
               int my = 100;
               if((30 < mouse_x && mouse_x < 110)) {
                  mx = 50;
                  checkL = new CheckLabel(mx,my);
               }
            }
         }
      }


   }

   public static void main(String[] args) {
      JFrame fenster = new Test();
      fenster.setSize(350,275);
      fenster.setLocation(200,300);
      fenster.setVisible(true);
      fenster.setResizable(false);
   }
}

Wenn man in den grauen Bereich klickt (Klasse CheckPoint), dann erscheint zuerst ein schwarzer Kreis, beim nächsten Klick dann ein Kreis mit schwarzem Rand, dann ein Kreuz und beim letzten Klick ist alles wieder weg. Funktioniert also, so wie es soll.

Nun brauch ich eine ähnliche Funktionalität für ein Label (liegt im blauen Bereich), nur dass dies nicht mehr über die Paint-Methode geschehen soll, sondern über setVisible true/false. Also hab ich mir gedacht, mach ich das genauso und schreib einfach eine Klasse CheckLabel, die genauso funktioniert wie CheckPoint, nur eben mit dem Unterschied, dass ich jetzt nicht mehr repaint aufrufe, sonder setVisible des Labels auf true bzw. false setze. Und was ist, es funktioniert nicht :(
Beim ersten Klick wird das Label zwar noch sichtbar, aber beim zweiten Klick verschwindet es nicht mehr.

Was ich daran nicht verstehe ist, dass ich ja eigentlich bei CheckLabel nichts anders gemacht hab, als bei CheckPoint, mal abgesehen vom Aufruf von repaint - brauch ich hier aber auch nicht. Warum wird bei CheckLabel auch noch die Prüfung auf ...== null durchgefhrt (an der muss es ja liegen, da das Label ja wieder erscheint) und bei CheckPoint nicht?

Kann mir von Euch jemand erklären, warum das so ist und mir bei der Lösung meines Problems (Label erscheinen/verschwinden lassen) behilflich sein?

Grüße,
muemmel
 

Leroy42

Top Contributor
Mir ist zwar absolut unverständlich was dein Programm machen soll,
warum andauernd neue CheckPoint und CheckLabel Instanzen angelegt
werden die dann nicht weiter benutzt werden und wieso du bei jeder
if-Abfrage neue Point-Objekte erzeugst, aber warum dein Label nicht
mehr unsichtbar wird ist klar: Bau mal System.out.println-Befehle ein:

Code:
               System.out.println("zeig auf false");
               zeig.setVisible(false);
Code:
               System.out.println("zeig auf true");
               zeig.setVisible(true);

Dann siehst du, daß nach jedem setVisible(false) unmittelbar
ein setVisible(true) aufgerufen wird.
 

muemmel_0811

Bekanntes Mitglied
Leroy42 hat gesagt.:
Mir ist zwar absolut unverständlich was dein Programm machen soll,
warum andauernd neue CheckPoint und CheckLabel Instanzen angelegt
werden die dann nicht weiter benutzt werden und wieso du bei jeder
if-Abfrage neue Point-Objekte erzeugst

Nicht böse sein, aber
1. würde die Erklärung hier den Rahmen sprengen,
2. mag sein, dass das was ich da grad tu, von einem Java-Profi anders gelöst wird - ich bin halt noch Anfängerin und hab bis jetzt damit mein Original-Programm gut zum Laufen gebracht

Aber, eine wirkliche Antwort auf meine Frage war das ja noch nicht, denn das setVisible wieder true wird, hatte ich ja selbst schon bemerkt, aber warum? Bzw. wie kann man so ein Problem denn dann lösen?

Ach ja, die Hashmap brauch ich, weil ich so kontrollieren kann, ob der Punkt schon belegt ist, denn in meinem Original-Prog kann nur ein "Element" (von momentan 10 verschiedenen) an einem Punkt sein.

Grüße,
muemmel
 

Murray

Top Contributor
Code:
           if(merker.get(new Point(mx,my)) != null) {
               int typ = merker.get(new Point(mx,my));
               if(typ == 88) {
                  zeig.setVisible(false);
                  merker.remove(new Point(mx,my)); //--- hier loescht Du den Punkt
               }
            }
            if(merker.get(new Point(mx,my)) == null) { //--- jetzt ist er weg (s.o.) und kommt deshalb gleich wieder
               merker.put(new Point(mx,my),88);
               zeig.setVisible(true);
            }
Vielleicht hilft ein "else" anstelle der zweiten Bedingung?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
M If Verständnis Problem Java Basics - Anfänger-Themen 2
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
J Compiler-Fehler Verständnis Problem bei Compiler-Warning Java Basics - Anfänger-Themen 7
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
U ADT verständnis Problem Java Basics - Anfänger-Themen 18
S Java Verständnis Problem Methoden etc. Java Basics - Anfänger-Themen 22
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6
J Verständnis Problem mit return --> Klausuraufgabe Java Basics - Anfänger-Themen 4
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
B Exception verständnis Problem Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
K nur für das verständnis Java Basics - Anfänger-Themen 3
B Verständnis Frage zu der Aufgabe Java Basics - Anfänger-Themen 30
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
J Code Verständnis Java Basics - Anfänger-Themen 9
Y MVC MouseEvent Verständnis Java Basics - Anfänger-Themen 24
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
D Hilfe bei Verständnis von Aufgabe Java Basics - Anfänger-Themen 1
I Verständnis Frage wegen einer Aufgabe Java Basics - Anfänger-Themen 10
P verständnis Frage Refernzen und Objekte Java Basics - Anfänger-Themen 1
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J java syntax verständnis Java Basics - Anfänger-Themen 6
M Verständnis von Deadlocks Java Basics - Anfänger-Themen 2
C Klassen/Objekte Verständnis Java Basics - Anfänger-Themen 8
O Singleton Verständnis Java Basics - Anfänger-Themen 4
C Allgemeines Verständnis For-Schleife Java Basics - Anfänger-Themen 3
R Input/Output MVC - Frage zum Verständnis Java Basics - Anfänger-Themen 5
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
X Kompilat verständnis Frage Java Basics - Anfänger-Themen 9
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
H Überladen Verständnis Java Basics - Anfänger-Themen 3
E Verständnis zu einem Rekursionsbeispiel Java Basics - Anfänger-Themen 12
F Verständnis Frage - && Java Basics - Anfänger-Themen 2
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
JavaKaffee Minimax-Algorithmus Verständnis Java Basics - Anfänger-Themen 12
C Methoden Frage zu Verständnis eines Beispiels Java Basics - Anfänger-Themen 3
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
M Verständnis Frage Java Basics - Anfänger-Themen 11
M Verständnis-Probleme mit eigenen Klassen Java Basics - Anfänger-Themen 2
T Verständnis von "final" und "static" Java Basics - Anfänger-Themen 6
F ArrayList() Verständnis Java Basics - Anfänger-Themen 14
M Verständnis von PrintWriter Java Basics - Anfänger-Themen 12
M Verständnis einiger Zeilen Java Basics - Anfänger-Themen 4
F Groovy Verständnis ConfigSlurper Java Basics - Anfänger-Themen 7
H Verständnis Strategy Pattern Java Basics - Anfänger-Themen 4
A Dringende Bitte um Erklärungen zum besseren Verständnis Java Basics - Anfänger-Themen 4
deimosmuc Hilfe zum Verständnis bei Vererbung Java Basics - Anfänger-Themen 11
T Verständnis-Frage Java Basics - Anfänger-Themen 2
E Verständnis frage zum return wert eines Arrays Java Basics - Anfänger-Themen 7
S Frage zu Verständnis und Logik Java Basics - Anfänger-Themen 5
P Verständnis bzgl. MVC Java Basics - Anfänger-Themen 11
M Klassen und Objekte => richtiges Verständnis? Java Basics - Anfänger-Themen 6
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
A Array Verständnis Frage Java Basics - Anfänger-Themen 4
L Hashtable Verständnis Frage Java Basics - Anfänger-Themen 4
H Verständnis: Methode Java Basics - Anfänger-Themen 2
Z Verständnis Java Basics - Anfänger-Themen 4
R Verständnis Java Basics - Anfänger-Themen 4
R Verständnis bei Listen Java Basics - Anfänger-Themen 2
R Verständnis Klassen Java Basics - Anfänger-Themen 9
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben