Popup auf Grafik

Status
Nicht offen für weitere Antworten.

Sengi

Mitglied
Hallo zusammen,

ich habe folgendes Problem.

Mehrere Grafiken werden gezeichnet mittels
Code:
g.fillPolygon(xPoints,yPoints,nPoints )
oder
Code:
g.drawPolygon(xPoints,yPoints,nPoints )
.

Wie bekomm ich es hin, dass wenn man mit der Maus über jene fährt, sich ein Popup öffnet?

Habe mit Tutorials angeguckt wo beschrieben wird wie man Buttons mit Popups belegt, aber das hilft mir leider nicht weiter.




Gruss
Sengi
 

AlArenal

Top Contributor
Hau nen MouseListener auf die Component, in der du da zeichnest. Der muss dann bei einer Bewegung überprüfen, ob die Maus sich innerhalb deines Polygons befindet und dann eben ein Popup aufmachen.
 

Sengi

Mitglied
ach du ***** na das gibt ja was. gibts da nicht eine einfachere variante? das scheint ziemlich umständlich zu sein / oder zeitaufwendig.
 

Leroy42

Top Contributor
Hätte ich jetzt auch gedacht, aber kurzes Googlen ergab

boolean contains( int x, int y )
Liefert true, wenn der Punkt (x,y) im Polygon liegt. Es wird ein Gerade-/Ungerade-Algorithmus verwendet, um dies herauszufinden.

Was bitte sehr ist ein Gerade-/Ungerade-Algorithmus ???:L
 

AlArenal

Top Contributor
Variante 1:
Das ist relativ. Vielleicht ist es für nen Unbeleckten nicht gerade etwas, was mal in 2 Minuten so rausrotzt.

Du hast ja die Koordinaten der einzelnen Punkte. Um Performance zu sparen, prüft in der Regel, ob der gegebene Punkt dem durch das Objekt umschriebene Rechteck inneliegt. Dazu muss man sich die kleinsten und größten X- und Y-Werte suchen, die gezeichnet das umgebende Rechteck (bounding rectangle) ergeben. Liegt der Punkt nicht innerhalb dieses Bereichs, wars das schon und das Programm braucht nicht prüfen, ob der Punkt in einem relativ komplexen Polygon liegt.
Liegt der Punkt in diesem Rechteck, muss man dann aber doch schauen, ob der Punkt in der vom Polygon bedeckten Fläche liegt.
Dazu habe ich auf Anhieb nen Link gefunden. Auf der Seite wird ganz zuoberst auf verschiedene Lösungsansätze verwiesen. Die sind zwar wohl alle nich tin Java, aber es geht ja um die Mathematik und die ist ja universell.

http://www.geom.uiuc.edu/software/cglist/trap.html

Variante 2:
Viiiel einfacher wäre es, du würdest Graphics#drawPolygon(Polygon p) benutzen. Wenn du nämlich vorher schon eine Instanz von Polygon hast, bist du mit Polygon#inside(int x, int y) deutlich besser dran ;)
Da der Konstruktor von Polygon dieselben Parameter erwartet wie dein bisheriger #drawPolygon, ist es also nur ne Sache von zwei, drei Zeilen Code.
 

Sengi

Mitglied
Ja aber wie willst du contains darauf anwenden?

wie sprichst du das polygon an? es wurde nur mittels g.blabla gezeichnet.
 

Sengi

Mitglied
Gut,


bin nun soweit dass ich die Abfrage starten kann.

Code:
if (plotView[i].getPolygon().inside(x_koord,y_koord)){
			
				
				
}


Nur wie hau ich nun einen Tooltip raus? mit setToolTip(String) funktioniert das ja nicht so ganz. Eigenen Frame dafür setzen?
 

MPW

Top Contributor
Schau dir mal die Klasse PopUp an, die wird von den original ToolTips auch implementiert.
 
R

Roar

Gast
nix set... du lieferst deinen tooltip als string zurück in der methode.
 
B

Beni

Gast
Was jetzt, Tooltip oder Popup?

Tooltip:
Code:
public class X extends JPanel{
  public String getToolTipText( MouseEvent e ){
     if( polygon.inside( e.getX(), e.getY() )
        return "Drinnen";
     else
        return "Draussen";
  }
}

Popup:
Code:
class Listener extends MouseAdapter{
  public void mouseClicked( MouseEvent e ){
    if( polygon.inside( e.getX(), e.getY() ){
       JPopupMenu menu = new JPopupMenu();

       ...
       menu.show( e.getComponent(), e.getX(), e.getY() );
    }
  }
}
 

Sengi

Mitglied
Sorry war schon zu spät. Ein Tooltip soll erscheinen.

Hm Also wird die Methode getToolTipText überschrieben. Gut. Aber wie ruf ich dann nun den eigentlichen Tooltip nun auf?
 
B

Beni

Gast
Die wird vom ToolTipManager aufgerufen, der dann auch die Tooltips erscheinen lässt. Sollte nichts passieren: registrier das Panel mit "ToolTipManager.sharedInstance().registerComponent( panel )". Ich dachte aber, das geschieht automatisch.
 

Sengi

Mitglied
Code:
public void mouseMoved(MouseEvent e) {
		for (int i = 1; i <= parse.get_data().getAttributeCount(); i++) {
			

			// MÜsste hier nicht auch was hin?
			
			
			
		}
		
	}
	
	public String getToolTipText(MouseEvent e) {
		for (int i = 1; i <= parse.get_data().getAttributeCount(); i++) {

			if (plotView[i].getPolygon().inside(e.getX(), e.getY())) 
				return "Drinnen";
			else
				return "Draußen";
		}
		

   }



Gut es funktioniert nicht. Es mh kommt einfach gar nichts. Bin irgendwie ein wenig ratlos.
 
B

Beni

Gast
Code:
package forum;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.event.MouseEvent;

import javax.swing.*;

public class Test extends JPanel{
    private Polygon polygon;
    
    public static void main( String[] args ){
        Test test = new Test();
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.getContentPane().add( test );
        frame.setSize( 200, 200 );
        frame.setVisible( true );
    }
    
    public Test() {
        polygon = new Polygon( 
                new int[]{ 3, 50, 80, 40, 10 },
                new int[]{ 30, 20, 30, 50, 60 }, 
                5);
        
        setToolTipText( "Normaler Text" );
    }
    
    @Override
    protected void paintComponent( Graphics g ) {
        g.setColor( Color.WHITE );
        g.fillRect( 0, 0, getWidth(), getHeight() );
        g.setColor( Color.RED );
        g.fillPolygon( polygon );
    }
    
    @Override
    public String getToolTipText( MouseEvent event ) {
        if( polygon.contains( event.getX(), event.getY() ))
            return "Rot";
        else
            return getToolTipText();
    }
}

Das "setToolTipText" ist praktisch, da damit die Komponente an der richtigen Stelle registriert wird.
 

Sengi

Mitglied
Keine Ahnung warum bei mir nichts funktioniert.

Aber ich habe 5 Polygone alle gespeichert in plotView und mittels plotview[1-5].getPolygon ansprechbar.

und wenn man einfach über son polygon mit der maus drüberfährt soll sich an entsprechender stelle nen tooltip öffnen.

einfach die gettooltiptext übershreiben funktioniert nicht.
und da die polygone in einer schleife alle initialisiert werden kann ich auch schlecht in die schleife ein settooltiptext reinsetzen.

hm, das kann doch nicht so schwer sein....
 
B

Beni

Gast
Das mit dem "setToolTipText" muss man nur einmal machen, damit die Component (das Panel, das hat nichts mit den Polyons zu tun) sich beim TooltipManager registriert. Danach übernimmt "getToolTipText" die Herrschaft, und der Wert den du "setToolTipText" übergeben hast, wird unwichtig.
 

Sengi

Mitglied
Es scheitert schon dadran dass ich wie im oben genannten Beispiel settooltiptext nicht benutzen kann, da er die funktion nicht kennt, egal was ich importiere. :(
 

Sengi

Mitglied
Ha habe einen Fehler entdeckt.

Es wurde auf dem Jframe gezeichnet. Aber leider brachte das ändern auch nichts ^^

Gezeichnet wird in der Klasse Zeichnen und in der Klasse Gui lass ich die maus überwachen.

Zeichnen läuft nun mit JPanel Gui mit JFrame. in Zeichnen wurde nun das settooltiptext() gesetzt und in Gui gettooltiptext. Aber passieren tut trotzdem nichts.

Ich habe einen mousemotionlistener eingefügt (gui) greift die überschriebene funktion gettooltiptext darauf zurück oder muss man die von dem listener aus aufrufen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J GUI Programmierung Popup-Menü AWT, Swing, JavaFX & SWT 4
T Maximieren des Application-Modal Popup-Dialoges+Parent AWT, Swing, JavaFX & SWT 1
N Kontextmenü (Popup-Fenster) erstellen AWT, Swing, JavaFX & SWT 3
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
F Popup Menu etwas verschieben AWT, Swing, JavaFX & SWT 2
T Swing Combox Popup vergroessert - Arrow nicht mehr vorhanden! AWT, Swing, JavaFX & SWT 4
X Popup Menü nur bei besonderem Fall öffnen AWT, Swing, JavaFX & SWT 3
B Popup auf der Textcoursor-Position AWT, Swing, JavaFX & SWT 5
B Swing Submenüs im Popup anzeigen AWT, Swing, JavaFX & SWT 2
T Popup Fenster AWT, Swing, JavaFX & SWT 2
B Ladebalken in einem Popup-Fenster AWT, Swing, JavaFX & SWT 6
Kenan89 PopUp Fenster AWT, Swing, JavaFX & SWT 4
Spin Tool: Popup -Programm AWT, Swing, JavaFX & SWT 3
N Swing Frame mit GlassPane und Popup AWT, Swing, JavaFX & SWT 5
B popup in jtable AWT, Swing, JavaFX & SWT 4
C JComboBox Popup nicht öffnen AWT, Swing, JavaFX & SWT 4
K Popup in Swing AWT, Swing, JavaFX & SWT 10
O Info Popup AWT, Swing, JavaFX & SWT 9
T JTable, Popup Fester per Rechtsklick auf Zelle AWT, Swing, JavaFX & SWT 19
W Java Popup bei Win7 und Mac verschieden? AWT, Swing, JavaFX & SWT 2
Eldorado Swing Popup-Menü mit Jspinner AWT, Swing, JavaFX & SWT 4
M Swing JSlider, Popup-Box AWT, Swing, JavaFX & SWT 3
D Swing JTabbedPane, TabComponent & Popup AWT, Swing, JavaFX & SWT 4
lumo SWT CellEditor & Popup AWT, Swing, JavaFX & SWT 3
data89 PopUp-Panel bauen - aber wie? AWT, Swing, JavaFX & SWT 2
S Swing PopUp oeffnet sich nach der Methode, die erst nach Fensteraufruf gestartet wird AWT, Swing, JavaFX & SWT 3
aze JTable in Popup.Problem mit DefaultTableCellRenderer AWT, Swing, JavaFX & SWT 9
N rechtsklick und popup setlocation AWT, Swing, JavaFX & SWT 2
C Swing JComboBox Popup sperren AWT, Swing, JavaFX & SWT 8
B Heavyweight Popup lässt keine MouseEvents durch AWT, Swing, JavaFX & SWT 2
SebSnake Popup-JFrame soll Daten an Parent-JFrame übergeben AWT, Swing, JavaFX & SWT 3
T Button des Popup-Menüs ermitteln AWT, Swing, JavaFX & SWT 4
T JComboBox nur mit Popup AWT, Swing, JavaFX & SWT 4
F Applet und Popup AWT, Swing, JavaFX & SWT 4
G Popup eines Bildes im JTable realisieren AWT, Swing, JavaFX & SWT 3
T Mouse Popup AWT, Swing, JavaFX & SWT 2
H PopUp-Fenster in einer Java Server Faces Anwendung AWT, Swing, JavaFX & SWT 4
J Popup an Cursorstelle anzeigen AWT, Swing, JavaFX & SWT 3
G Popup springt nicht in der Naehe des Klicks auf AWT, Swing, JavaFX & SWT 3
L Popup-Menu AWT, Swing, JavaFX & SWT 2
G Funktion für PopUp Menü AWT, Swing, JavaFX & SWT 32
I Popup-Trigger-Maustaste gleich beim Programmstart ermitteln? AWT, Swing, JavaFX & SWT 7
M JComboBox Popup öffnet nicht AWT, Swing, JavaFX & SWT 6
Q Popup der JComboBox AWT, Swing, JavaFX & SWT 4
S PopUp in JTable / JScrollPane AWT, Swing, JavaFX & SWT 3
K Popup Deluxe (Transparentes Popup)! AWT, Swing, JavaFX & SWT 8
T Popup-Menü unter Linux AWT, Swing, JavaFX & SWT 2
B Nicht rechteckige Popup Komponente AWT, Swing, JavaFX & SWT 4
Paule Popup oder Dialog-Feld mit eigenem Inhalt AWT, Swing, JavaFX & SWT 9
G Problem mit Kontextmenu(Popup Menü) AWT, Swing, JavaFX & SWT 3
A Image im Popup-Fenster AWT, Swing, JavaFX & SWT 12
K JTable als Popup in einer JComboBox? AWT, Swing, JavaFX & SWT 3
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8
S 2D-Grafik Winkelberechnungen auf 2D Grafik AWT, Swing, JavaFX & SWT 2
E Grafik karte erkennen AWT, Swing, JavaFX & SWT 3
S JavaFX Java Custom Node Grafik zurückgeben AWT, Swing, JavaFX & SWT 2
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
T AWT Grafik"Array" einzelne Elemente verschieben AWT, Swing, JavaFX & SWT 1
Sanni94 JavaFX Kann man eine Grafik in einen Text einbinden? AWT, Swing, JavaFX & SWT 2
S Höhendaten in einer Grafik ausgeben AWT, Swing, JavaFX & SWT 2
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
S Grafik in einer Klassen einfügen/hinzufügen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
F AWT Grafik wird nicht richtig aktualisiert AWT, Swing, JavaFX & SWT 2
J JTabbedPane Grafik unterhalb der Tabs AWT, Swing, JavaFX & SWT 3
F Grafik hängt sich auf AWT, Swing, JavaFX & SWT 20
S LookAndFeel GUI-Grafik AWT, Swing, JavaFX & SWT 5
J Verschwommene Grafik AWT, Swing, JavaFX & SWT 4
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
F Grafik mit Buttons versehen AWT, Swing, JavaFX & SWT 8
C Grafik Taschenrechner AWT, Swing, JavaFX & SWT 5
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
Kenan89 Grafik und Text in JPanel anzeigen AWT, Swing, JavaFX & SWT 8
D Fenster mit Grafik überlappen AWT, Swing, JavaFX & SWT 3
Maxim6394 Rotation einer Grafik in swing AWT, Swing, JavaFX & SWT 13
D Swing Grafik in JPanel anzeigen. AWT, Swing, JavaFX & SWT 3
W Grafik von JFrame korrekt speichern AWT, Swing, JavaFX & SWT 7
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
D 2D-Grafik Problem beim Drucken eines Grafik-Objekts AWT, Swing, JavaFX & SWT 2
Daniel_L Grafik erstellen, drin zeichnen und dann speichern AWT, Swing, JavaFX & SWT 2
D Grafik über JPanels hinweg verschieben AWT, Swing, JavaFX & SWT 2
C Grafik von main aus aufrufen AWT, Swing, JavaFX & SWT 13
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
T rekursive Grafik AWT, Swing, JavaFX & SWT 5
I 2D-Grafik Problem mit schreiben von Text auf eine Grafik AWT, Swing, JavaFX & SWT 7
F Swing Framework gesucht (Swing, Chart, "Scheduling" Grafik) AWT, Swing, JavaFX & SWT 2
S Pacman-Grafik AWT, Swing, JavaFX & SWT 23
N Eigener Grafik Editor mit fehlerhafter Anzeige AWT, Swing, JavaFX & SWT 4
lordcarlos Dynamische und interaktive grafik AWT, Swing, JavaFX & SWT 5
D Systemmodale Grafik AWT, Swing, JavaFX & SWT 10
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
W Grafik aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing Zugriff auf Polyline in Grafik AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben