2011-09-08 46 views
7

Tôi có một JTreeTable và đã triển khai thành công MouseMotionListener để hiển thị chú giải công cụ bất cứ khi nào chuột ở trên một trong các ô. Tuy nhiên, khi nhấp vào ô, chú giải công cụ sẽ không hiển thị. Tôi đã thử một vài thứ như đặt văn bản trên các sự kiện mouseClickedmouseReleased nhưng sự kiện đó không hoạt động. Tôi tìm thấy mã này -Cách hiển thị chú giải công cụ khi nhấp chuột

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

if(toolTipAction != null){ 

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

để sử dụng trong phương pháp mouseReleased, mà không làm cho tooltip popup, nhưng đó là sau đó ở vị trí sai. Vì vậy, tiếp theo tôi đã cố gắng ghi đè phương pháp getTooltipLocation trên JTreeTable và điều này hoạt động tốt cho các sự kiện mouseMoved nhưng không được gọi bằng phương pháp trên. Bất cứ ai có thể làm sáng tỏ một số cách để làm điều này?

Cảm ơn Andy

Trả lời

0

org.apache.jorphan.gui.JTreeTable kéo dài javax.swing.JComponent javax.swing.JComponent # setToopTipText() không hoạt động? Tôi nhận ra rằng bạn muốn sử dụng Hành động nhưng đối với chú giải công cụ? Tôi sẽ sử dụng Hành động khi nhiều hành động trên giao diện người dùng cần chia sẻ nó.

11

Bạn có thể sử dụng phương pháp sau đây để hiển thị chú giải công cụ (sẽ có một chút chậm trễ). Sau đó, bạn có thể ghi đè lên getToolTipLocation() phương pháp từ một MouseEvent bây giờ sẽ được tạo ra:

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

hoàn hảo, làm việc nhờ mỹ – user935339

+4

@ user935339, sau đó bạn có thể muốn "chấp nhận" câu trả lời. – camickr

Các vấn đề liên quan