Mouse Bereiche - Besser notieren - Tipps

ChrisB.

Mitglied
Guten Tag,
und zwar führt mein Programm ToolTips aus, sobald ich über einen gewissen Bereich im Panel bin.
Leider ist das etwas unübersichtlich, weil da noch viele Bereiche dazu kommen. Funktionieren tut meins ja, aber ich würde gerne mal erfragen, ob jemand eine Idee hätte wie ich das besser und übersichtlicher darstellen kann, vllt auch mit weniger Programmcode?

Hier mein code:

Java:
    import javax.swing.*;
    import javax.imageio.*;
    import java.awt.*;
    import java.net.*;
    import java.io.*;
    import java.awt.event.*;
    import javax.swing.ToolTipManager;


     
     
public class PicturePanel extends JPanel
{
  private Image background;
  int xpos, ypos;
  double Rven=12, Uges=12;
  String[] arrayR = new String [7];
  
  public PicturePanel() {
    super(new GridBagLayout());
    ToolTipManager.sharedInstance().registerComponent(this);
    
    try {  
      background = ImageIO.read(getClass().getResource("background.png"));
    }
    catch(IllegalArgumentException iae) {
      JOptionPane.showMessageDialog(this, "Grafikdatei nicht gefunden!\n"+iae.getMessage());
      System.exit(-1);
    }
    
    catch(IOException ioe) {
      JOptionPane.showMessageDialog(this, "Fehler beim Einlesen einer Grafikdatei!\n"+ioe.getMessage());
      System.exit(-1);
    }    
    
    
    
    for (int i=0;i<7 ;i++ ) {
      if (arrayR[i] == null) 
      {
        arrayR[i] = "0";
      } 
      
    } 
    
    
    
    
    addMouseListener(new MouseAdapter()
    {  
      
      public void mousePressed(MouseEvent event){
        
        xpos = event.getX();
        ypos = event.getY();
        
        
        
        if ((xpos >= 60)  && (xpos <= 87) && (ypos >= 63) && (ypos <= 75))    
        {
          arrayR[0] = JOptionPane.showInputDialog(null,"Geben Sie die Größe vom Widerstand R1 ein:","Widerstandeingabe", JOptionPane.PLAIN_MESSAGE);
        }
        if ((xpos >= 185)  && (xpos <= 213) && (ypos >= 63) && (ypos <= 75))    
        {
          arrayR[1]  = JOptionPane.showInputDialog(null,"Geben Sie die Größe vom Widerstand R1 ein:","Widerstandeingabe", JOptionPane.PLAIN_MESSAGE);
        }
        
        new Berechnungen(arrayR, Rven, Uges); 
        
      }
    }) ;
    
    addMouseMotionListener(new MouseMotionAdapter()
    {
      public void mouseMoved(MouseEvent event){
        xpos = event.getX();
        ypos = event.getY();
        
        if ((xpos >= 60)  && (xpos <= 87) && (ypos >= 63) && (ypos <= 75)) 
        {
          setToolTipText("<html>R1"+"<br>"+arrayR[0]+" Ohm"+"</html>"); 
        }
        else
        if ((xpos >= 185)  && (xpos <= 213) && (ypos >= 63) && (ypos <= 75)) 
        {
          setToolTipText("<html>R2"+"<br>"+arrayR[1]+" Ohm"+"</html>");
        }
        else
        if ((xpos >= 315)  && (xpos <= 344) && (ypos >= 63) && (ypos <= 75)) 
        {
          setToolTipText("<html>R3"+"<br>"+arrayR[2]+" Ohm"+"</html>");
        }
        else
        if ((xpos >= 448)  && (xpos <= 476) && (ypos >= 63) && (ypos <= 75)) 
        {
          setToolTipText("<html>R4"+"<br>"+arrayR[3]+" Ohm"+"</html>");
        }
        else
        if ((xpos >= 578)  && (xpos <= 606) && (ypos >= 63) && (ypos <= 75)) 
        {
          setToolTipText("<html>R5"+"<br>"+arrayR[4]+" Ohm"+"</html>");
        }
        else
        if ((xpos >= 0)  && (xpos <= 0) && (ypos >= 0) && (ypos <= 0)) 
        {
          setToolTipText("<html>R6"+"<br>"+arrayR[5]+" Ohm"+"</html>");
        }
        else
        {
          setToolTipText("");
        }      
        
        
      } 
    });
    
    
  }
  
  
  
  
  @Override
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if(background != null) {
      g.drawImage(background, 0, 0, this);
      
    }
  }
  
}
 

Machareder

Bekanntes Mitglied
ich hab deinen code jetzt nicht sturtiert und durchgelesen (nur drüber geschaut :D)
Was ich jetzt machen würde wären einerseits extra klassen nicht nur methoden und zu versuchen die klassen für deine anderen "Bereiche" wiederzuverwenden. Weiterhin würde ich den Methoden/Klassen aussagekräftige Namen geben.
Und ich glaube man könnte theoretisch die ganzen else if Beziehungen etwas verkürzen :D Bin jetzt aber zu faul genauer drüber zu schauen
 

Bananabert

Bekanntes Mitglied
Guten Abend,

Du könntest entweder eine eigene Klasse für deine Bereiche schreiben.
In denen gibts du x,y,width,height an. Erstellst darin eine Methode die du vielleicht "containsPoint(int x, int y)" nennst.
Oder aber wenn du deinen Bereich definiert hast, kannst du aus den Koordinaten z.B. ein Objekt der Klasse Rectangle erzeugen. Aus deiner Maus Position machst du ein Objekt der Klasse Point und mit
Java:
containsPoint(Point p) {
	return this.getBounds().contains(p);
}
abfragen ob deine Maus sich in diesem Bereich befindet.

Deine Bereiche könntest du in einer Liste oder einem Array speichern, darüber Loopen und jeden Bereich fragen ob der Maus-Hover in diesem Bereich ausgeführt wurde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CodingBerlin Mouse Clicks abfangen Allgemeine Java-Themen 4
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
K Mouse koordinaten im programm Allgemeine Java-Themen 4
B Mouse click mit java Allgemeine Java-Themen 10
M Mouse Klicks simulieren? Allgemeine Java-Themen 10
G Mouse Location -> setMouseLocation() Allgemeine Java-Themen 3
D Thread durch Mouse-Event beenden Allgemeine Java-Themen 5
G Problem Canvas Mouse Event Allgemeine Java-Themen 7
S Hash-Bereiche erstellen die gleichverteilt sind..? Allgemeine Java-Themen 8
O PDF auslesen und verändern, was ist besser iText oder PDFBox ? Allgemeine Java-Themen 9
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
R LinkedList und Threads - welche Methode ist besser? Allgemeine Java-Themen 2
J Drei Bedingungen -> 9 Fällen, welcher Ansatz besser Allgemeine Java-Themen 4
F Objekte oder besser ID in Listen speichern? Allgemeine Java-Themen 2
R Gibt es eine JVM, die besser mit dem Speicher umgeht? Allgemeine Java-Themen 7
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
M Generics - besser programmieren, Warnung umgehen Allgemeine Java-Themen 4
Chris_1980 ist es besser ein lokales Objekt zu erstellen. Allgemeine Java-Themen 14
L LeerZeichen besser zu kontrollieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben