2011-08-21 22 views
8

Pregunta de Java Swing.Swing: cómo crear un widget JToolTip personalizado que se mueve con el mouse

Tengo un JPanel que muestra un gráfico. Cuando muevo el mouse sobre este gráfico, quiero que cierta información se muestre en un widget similar a la información sobre herramientas que se mueve con el mouse. ¿Cómo puedo implementar esto mejor?

Supongo que mi problema se resolverá si sé cómo posicionar un JComponent personalizado dentro del JPanel que actúa como mi lienzo de dibujo. Podría atrapar el evento movido por el mouse y reposicionar/actualizar el widget. Cualquier otra solución (incluso posiblemente usando JToolTip directamente) también sería muy bienvenida.

Disculpas si esta pregunta es un poco básica. Ha pasado mucho tiempo desde la última vez que utilicé Swing, así que todavía estoy volviendo a aprender cómo trabajar con él. ¡Muchas gracias de antemano!

+0

que no es fácil el trabajo, todos los ejemplos que vi eran demasiado tiempo y basado en el Modelo de JComponent + SwingUtilities + JWindow, tal vez alguien tiene easies idea – mKorbel

Respuesta

8

Reemplace el método getToolTipText(MouseEvent) para establecer dinámicamente la información sobre herramientas según la ubicación del mouse.

Editar:

Si desea que la información sobre herramientas para mover continuamente con el ratón, entonces también tendrá que reemplazar el método 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

tal vez pero nunca vi sobre herramientas vuelo/sigue al ratón en la pantalla y con la conexión al JComponent con el mouse Cursor +1 – mKorbel

+0

@mKorbel, ver edit. – camickr

+0

gracias muy buen ejemplo, entonces cuál de las opciones sería mejor opción 1) para comprobar JComponent utilizando SwingUtilities, luego cambiar las propiedades de información de herramientas de un Array 2 preparado previamente, configurar Tooltip solo para JComponent esperado directamente y en este caso JComponet devuelve propiedades a la información sobre herramientas – mKorbel

Cuestiones relacionadas