2011-09-08 12 views
7

Ho un JTreeTable e ho implementato correttamente un MouseMotionListener per mostrare un suggerimento ogni volta che il mouse si trova su una delle celle. Tuttavia, quando si fa clic sulla cella, il suggerimento non viene visualizzato. Ho provato diverse cose come impostare il testo sugli eventi mouseClicked e mouseReleased ma questo non funziona. Ho trovato questo codice -Come visualizzare un suggerimento su un clic del mouse

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

if(toolTipAction != null){ 

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

da utilizzare nel metodo mouseReleased, che fa fare il tooltip popup, ma è poi nella posizione sbagliata. Quindi ho provato a sostituire il metodo getTooltipLocation sullo JTreeTable e questo funziona perfettamente per gli eventi mouseMoved ma non viene chiamato con il metodo precedente. Qualcuno può far luce su come farlo?

Grazie Andy

risposta

0

org.apache.jorphan.gui.JTreeTable estende javax.swing.JComponent javax.swing.JComponent # setToopTipText() non funziona? Mi rendo conto che vuoi usare Action ma per i tooltip? Vorrei utilizzare l'azione quando più azioni dell'interfaccia utente avrebbero bisogno di condividerlo.

11

È possibile utilizzare il seguente approccio per mostrare il suggerimento (ci sarà un leggero ritardo). Quindi è possibile eseguire l'override del metodo getToolTipLocation() dal momento che un MouseEvent viene ora generato:

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

perfetto, che funziona bene grazie – user935339

+4

@ user935339, quindi si consiglia di "accettare" la risposta. – camickr

Problemi correlati