2011-08-21 12 views
8

Pytanie Java Swing.Swing: Jak utworzyć niestandardowy widget typu JToolTip, który porusza się za pomocą myszy

Mam JPanel, który wyświetla wykres. Kiedy przesuję kursor myszy nad tym wykresem, chcę, aby pewne informacje były wyświetlane w widżecie podobnym do podpowiedzi, który porusza się za pomocą myszy. Jak najlepiej to wdrożyć?

Zgaduję, że mój problem zostanie rozwiązany, jeśli wiem, jak ustawić niestandardowy JComponent całkowicie w JPanel, który działa jak moje płótno rysunku. Mógłbym wtedy uwięzić zdarzenie przeniesione myszą i zmienić położenie widgetu. Każde inne rozwiązanie (w tym możliwość bezpośredniego używania JToolTip) również będzie bardzo mile widziane!

Przeprosiny, jeśli to pytanie jest trochę podstawowe. Minęło naprawdę dużo czasu odkąd ostatnio użyłem Swinga, więc wciąż się uczę, jak z nim pracować. Z góry bardzo dziękuję!

+0

że nie jest to łatwe zadanie, wszystkie przykłady, które widziałem były zbyt długie i na podstawie JComponent za model + SwingUtilities + JWindow, może ktoś ma easies pomysł – mKorbel

Odpowiedz

8

Zastępuje metodę getToolTipText(MouseEvent), aby dynamicznie ustawiać wskazówkę narzędzia na podstawie położenia myszy.

Edit:

Jeśli chcesz etykietka nieustannie poruszać się z myszy, a następnie będzie trzeba także zastąpić metodę getToolTipLocation().

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ToolTipPanel extends JPanel 
{ 
    public ToolTipPanel() 
    { 
     setPreferredSize(new Dimension(200, 200)); 
     setToolTipText(""); 
    } 

    public void paintComponent(Graphics g) 
    { 
     g.setColor(Color.red); 
     g.fillRect(0, 0, 100, 200); 
     g.setColor(Color.blue); 
     g.fillRect(100, 0, 100, 200); 
    } 

    public String getToolTipText(MouseEvent e) 
    { 
     if (e.getX() < 100) 
      return "red"; 
     else 
      return "blue"; 
    } 

    public Point getToolTipLocation(MouseEvent e) 
    { 
     Point p = e.getPoint(); 
     p.y += 15; 
     return p; 
//  return super.getToolTipLocation(e); 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new ToolTipPanel()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

być może, ale nigdy nie widziałem etykietka latający/następująco myszy na ekranie oraz z połączeniem z JComponentem pod kursorem myszy +1 – mKorbel

+0

@mKorbel, patrz edycja. – camickr

+0

dzięki bardzo fajnemu przykładowi, a następnie, która z metod byłaby lepszą opcją 1), aby sprawdzić JComponent za pomocą SwingUtilities, a następnie zmienić właściwości podpowiedzi z niektórych wstępnie przygotowanych Array 2) ustawić etykietkę tylko dla oczekiwanego JComponent bezpośrednio iw tym przypadku JComponet zwraca właściwości z powrotem do podpowiedzi – mKorbel

Powiązane problemy