Info Popup

O

Ondine

Gast
Guten Abend,

ich hoffe hier weiss jemand Rat.
Ihr ennt doch bestimmt bei den Webbrowsern, wenn man dort mit der Maus auf Elementen verharrt, erscheint dann so eine kleine Infobox.
Meine Frage ist ob esso etwas in Java auch gibt. Aber ich meine keine Tooltips. Ich habe in meiner Graphik Felder, diese Felder haben intern Koordinaten. Ich möchte wenn ich mit der maus auf so einem Feld verharre, dass dann so eine kleine Infobox aufpopt und mir die Koordinaten anzeigt.
Bei toolTips ist das Porblem, dass die immer an Komponenten gebunden sind, aber es ist total kompliziert müsste ich für jedes Feld eine Komponenteerzeugen.
Freue mich auf hilfreiche Tipps.
 

André Uhres

Top Contributor
Ich habe in meiner Graphik Felder, diese Felder haben intern Koordinaten. Ich möchte wenn ich mit der maus auf so einem Feld verharre, dass dann so eine kleine Infobox aufpopt und mir die Koordinaten anzeigt.

Hallo Ondine,

da die Graphik sicher eine JComponent ist, geht es durchaus mit Tooltips.

Mit einem MouseMotionListener setzen wir einfach in mouseMoved den für diesen Bereich gewünschten Tooltip gemäß den aktuellen Mauskoordinaten:
Java:
if(Mauskoordinaten in einem bestimmen Bereich){
    panel.setToolTipText("gewünschter Text für diesen Bereich");
}else{
    panel.setToolTipText(null);// kein Tooltip für diesen Bereich
}

Hier noch ein kleines Beispiel:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class TooltipDemo {
    public TooltipDemo() {
        JFrame f = new JFrame("TooltipDemo");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400, 300);
        f.setLocationRelativeTo(null);
        f.add(new Grafik());
        f.setVisible(true);
    }
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {
            public void run() {
                TooltipDemo tooltipDemo = new TooltipDemo();
            }
        };
        SwingUtilities.invokeLater(gui);
    }
}
class Grafik extends JComponent {
    public Grafik() {
        addMouseMotionListener(new MouseInputAdapter() {
            @Override
            public void mouseMoved(final MouseEvent e) {
                int x = e.getX();
                int y = e.getY();
                if (x > 100 && x < 200 && y > 100 && y < 200) {
                    setToolTipText("x=100, y=100");
                } else if (x > 250 && x < 350 && y > 100 && y < 200) {
                    setToolTipText("x=250, y=100");
                } else {
                    setToolTipText(null);
                }
            }
        });
    }
    @Override
    protected void paintComponent(final Graphics g) {
        super.paintComponent(g);
        g.drawRect(100, 100, 100, 100);
        g.drawRect(250, 100, 100, 100);
    }
}

Gruß,
André
 
Zuletzt bearbeitet:
O

Ondine

Gast
Mhmmm, ja, stimmt das könnte funktionieren. Andererseuts finde ich, dass die ToolTipps nicht unbedingt elegant aussehen. Jedenfalls nicht so elegant wie die kleinen Popo-Infons im Browser. Kann man das irgendwie so machen, dass es halt "schöner" aussieht? ^^
 

André Uhres

Top Contributor
Kann man das irgendwie so machen, dass es halt "schöner" aussieht?

Wir können die Klasse JToolTip erweitern:

Java:
class MyToolTip extends JToolTip {

    private JTextArea tipArea;

    /** Creates a tool tip. */
    public MyToolTip(final int width, final int height) {
        setPreferredSize(new Dimension(width, height));
        setLayout(new BorderLayout());
        tipArea = new JTextArea();
        tipArea.setLineWrap(true);
        tipArea.setWrapStyleWord(true);
        tipArea.setEditable(false);
        tipArea.setBackground(new Color(255, 255, 204));
        Border border = BorderFactory.createBevelBorder(BevelBorder.RAISED);
        tipArea.setBorder(border);
        add(tipArea);
    }

    @Override
    public void setTipText(final String tipText) {
        String oldValue = this.tipArea.getText();
        tipArea.setText(tipText);
        tipArea.setCaretPosition(0);
        firePropertyChange("tiptext", oldValue, tipText);
    }

    @Override
    public String getTipText() {
        return tipArea == null ? "" : tipArea.getText();
    }

    @Override
    protected String paramString() {
        String tipTextString = (tipArea.getText() != null ? tipArea.getText() : "");

        return super.paramString()
                + ",tipText=" + tipTextString;
    }
}
Und so wird unser Tooltip in die JComponent eingebaut:
Java:
    @Override
    public JToolTip createToolTip() {
        MyToolTip tip = new MyToolTip(90, 25);
        tip.setComponent(this);
        return tip;
    }

Gruß,
André
 
O

Ondine

Gast
Danke erstmal für die ausfürhlichen Hilfen!
MHMMM irgendwie bekomm ich das nciht so ganz hin. Hab es mit deiner 2. Methode versucht.

und zwar so:
Java:
	static void createTooltip(int x, int y) {
		int mouse_x = xcoord + x/width;
		int mouse_y = ycoord + y/width*(-1) + 2*d+2;
		MyToolTip tip = new MyToolTip(90, 25);
		tip.setComponent(jPanel1);
		tip.setToolTipText(mouse_x+ "|" + mouse_y);
	}

Diese Methode wird aufgerufen durch das mousEvent.

Nur da passiert dann NIX wenn ich mit der Maus über die Grafik fahre.
 

André Uhres

Top Contributor
Java:
	static void createTooltip(int x, int y) {
		int mouse_x = xcoord + x/width;
		int mouse_y = ycoord + y/width*(-1) + 2*d+2;
		MyToolTip tip = new MyToolTip(90, 25);
		tip.setComponent(jPanel1);
		tip.setToolTipText(mouse_x+ "|" + mouse_y);
	}
Diese Methode wird aufgerufen durch das mousEvent.

"MyToolTip" darf nur in der überschriebenen Methode @Override public JToolTip createToolTip() {..} erzeugt werden!

In mouseMoved wird einfach setToolTipText auf der Grafik aufgerufen.

Gruß,
André
 
O

Ondine

Gast
Guten Abend,

ich habe nun das Problem, dass wenn er einmal den Tooltip angezeigt hat, wird auf die Zeichenfläche dann immer repaint ausgeführt wann immer das Event mousemoved wieder auftritt. Bevor der Tooltip angezeigt wurde, gibt es kein repaint, dannach immer wenn das Event auftritt. Ist das normal? Oder sollte das eigentlich nicht so sein?

Lg,
Ondine
 

André Uhres

Top Contributor
Hallo Ondine,

es ist zwar normal, dass ein repaint erfolgt wenn der Tooltip verschwindet. Aber wenn ein repaint bei jedem "mouseMoved" Event kommt, dann hat sich wohl wieder ein Fehler in deinen Code eingeschlichen.

Gruß,
André
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Text-Info in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 15
Shallty JavaFX MenuItem (Info) Icon ändern AWT, Swing, JavaFX & SWT 7
C Swing Info-Ebene überdeckt Spielfeld-Ebene komplett AWT, Swing, JavaFX & SWT 5
T Info Datei AWT, Swing, JavaFX & SWT 3
O JPanel - Info speichern AWT, Swing, JavaFX & SWT 2
L Eine Sprechblase als Info. AWT, Swing, JavaFX & SWT 2
G JMenu Info-Fenster ganz Rechts AWT, Swing, JavaFX & SWT 5
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
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
S Popup auf Grafik AWT, Swing, JavaFX & SWT 18
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

Ähnliche Java Themen


Oben