2011-09-08 9 views
7

Tengo un JTreeTable y he implementado con éxito un MouseMotionListener para mostrar una información sobre herramientas cada vez que el mouse está sobre una de las celdas. Sin embargo, al hacer clic en la celda, la información sobre herramientas no aparece. He intentado varias cosas, como configurar el texto en los eventos mouseClicked y mouseReleased, pero eso no funciona. He encontrado este código -Cómo mostrar una información sobre herramientas con un clic del mouse

Action toolTipAction = treeTable.getActionMap().get("postTip"); 

if(toolTipAction != null){ 

    ActionEvent postTip = new ActionEvent(treeTable,ActionEvent.ACTION_PERFORMED, ""); 
    toolTipAction.actionPerformed(postTip);  
} 

para uso en el método mouseReleased, lo que hace que el tooltip popup, pero es entonces en la posición incorrecta. Entonces intenté sobreescribir el método getTooltipLocation en el JTreeTable, y esto funciona bien para los eventos mouseMoved pero no se llama con el método anterior. ¿Alguien puede arrojar algo de luz sobre cómo hacer esto?

Gracias Andy

Respuesta

0

org.apache.jorphan.gui.JTreeTable extiende javax.swing.JComponent javax.swing.JComponent # setToopTipText() no funciona? ¿Me doy cuenta de que quiere usar Action pero para la información sobre herramientas? Usaría Action cuando necesitaría compartir varias acciones de UI.

11

Puede usar el siguiente enfoque para mostrar la información sobre herramientas (habrá un ligero retraso). A continuación, puede reemplazar el método getToolTipLocation() ya continuación, se generó un MouseEvent:

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

public class ToolTipOnRelease extends JPanel 
{ 
    public ToolTipOnRelease() 
    { 
     JLabel label = new JLabel("First Name:"); 
     add(label); 

     JTextField textField = new JTextField(15); 
     add(textField); 

     MouseListener ml = new MouseAdapter() 
     { 
      public void mouseReleased(MouseEvent e) 
      { 
       JComponent component = (JComponent)e.getSource(); 
       component.setToolTipText("Mouse released on: " + component.getClass().toString()); 

       MouseEvent phantom = new MouseEvent(
        component, 
        MouseEvent.MOUSE_MOVED, 
        System.currentTimeMillis(), 
        0, 
        0, 
        0, 
        0, 
        false); 

       ToolTipManager.sharedInstance().mouseMoved(phantom); 
      } 
     }; 

     label.addMouseListener(ml); 
     textField.addMouseListener(ml); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("ToolTipOnRelease"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new ToolTipOnRelease()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+0

perfecta, que funciona gracias finas – user935339

+4

@ user935339, entonces es posible que desee "aceptar" la respuesta. – camickr

Cuestiones relacionadas