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);
      
    }
  }
  
}
 
ich hab deinen code jetzt nicht sturtiert und durchgelesen (nur drüber geschaut 😀)
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 😀 Bin jetzt aber zu faul genauer drüber zu schauen
 
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.
 

Neue Themen


Zurück
Oben