2010-07-07 13 views
5

Điều này dường như là một vấn đề xác minh với SWINGGiải pháp cho setToolTipText có sử dụng các sự kiện chuột không?

http://forums.sun.com/thread.jspa?threadID=385730

Tôi hiện đang cố gắng để thiết lập các văn bản tooltip của một tab trong một JTabbedPane nhưng khi tôi làm tôi không thể thực sự chọn tab nữa vì tooltip thêm một người nghe chuột đang tiêu thụ các sự kiện.

Có ai biết cách giải quyết cho phép tôi giữ chú giải công cụ và chuột của tôi không? Cảm ơn bạn.

Theo yêu cầu ở đây là SSCCE tôi

package jtabbedbug; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTabbedPane; 

public class JTabBug{ 

    public static void main(String[] args) { 

     JTabbedPane jTabbedPane = new JTabbedPane(); 
     jTabbedPane.addTab("Red", new JLabel("Roses")); 
     jTabbedPane.addTab("Blue", new JLabel("Skies")); 
     jTabbedPane.addTab("Green", new JLabel("Grass")); 

     for (int i = 0; i < jTabbedPane.getTabCount(); i++) { 
     JLabel tabComponent = new JLabel(jTabbedPane.getTitleAt(i)); 
     tabComponent.setToolTipText("Tip: " + tabComponent.getText()); 
     jTabbedPane.setTabComponentAt(i, tabComponent); 
     } 

     JFrame jFrame = new JFrame("Testing"); 
     jFrame.add(jTabbedPane); 
     jFrame.setSize(400, 500); 
     jFrame.setVisible(true); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

} 
+2

tôi nghi ngờ các tooltip được tiêu thụ các sự kiện chuột. Một tab được chọn bằng một cú click chuột. Chú giải công cụ được tạo ra bởi các sự kiện mouseMoved mouseEntered. Đăng SSCCE của bạn (http://sscce.org) cho thấy sự cố. – camickr

+0

OK Tôi đã thêm SSCCEE của mình hiển thị sự cố. – Sandro

+0

Tôi hiểu ý của bạn là gì, SSCCE đã làm rõ câu hỏi. – camickr

Trả lời

4

Dưới đây là một cách giải quyết:

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

public class JTabBug{ 

    public static void main(String[] args) { 

     JTabbedPane jTabbedPane = new JTabbedPane() 
     { 
     @Override 
     public String getToolTipText(MouseEvent e) 
     { 
      int index = ((TabbedPaneUI)ui).tabForCoordinate(this, e.getX(), e.getY()); 

      if (index != -1) 
      { 
       JComponent component = (JComponent)getTabComponentAt(index); 
       return component.getToolTipText(); 
      } 

      return super.getToolTipText(e); 
     } 
     }; 
     ToolTipManager.sharedInstance().registerComponent(jTabbedPane); 
     jTabbedPane.addTab("Red", new JLabel("Roses")); 
     jTabbedPane.addTab("Blue", new JLabel("Skies")); 
     jTabbedPane.addTab("Green", new JLabel("Grass")); 

     for (int i = 0; i < jTabbedPane.getTabCount(); i++) { 
     JLabel tabComponent = new JLabel(jTabbedPane.getTitleAt(i)); 
     tabComponent.setToolTipText("Tip: " + tabComponent.getText()); 
     ToolTipManager.sharedInstance().unregisterComponent(tabComponent); 
     jTabbedPane.setTabComponentAt(i, tabComponent); 
     } 

     JFrame jFrame = new JFrame("Testing"); 
     jFrame.add(jTabbedPane); 
     jFrame.setSize(400, 500); 
     jFrame.setVisible(true); 
     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 
+0

Tuyệt vời. Trong khi xa lý tưởng mà nhận được công việc. Cảm ơn bạn! – Sandro

1

vẻ khi được làm việc mà không cần bất kỳ vấn đề (dưới Java 6). Đây là mã của tôi:

package com.twist.ui.widgets; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTabbedPane; 
import javax.swing.SwingUtilities; 

public class Test { 

    public static void main(String[] args) { 


     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 

       JFrame f = new JFrame(); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       JTabbedPane tabs = new JTabbedPane(); 

       String s; 
       for(int i=0; i<3; i++) { 
        s = "Tab " + (i+1); 
        tabs.add(new JPanel(), s); 
        tabs.setToolTipTextAt(i, "Tooltip for " + s); 
       } 
       f.setContentPane(tabs); 


       f.setSize(400,300); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 


      } 
     }); 

    } 


} 
+0

Xin lỗi vì đã khiến bạn gặp rắc rối đó. Tôi đang sử dụng một tabcomponent tùy chỉnh, và cho rằng một tooltip đang gây ra rắc rối. – Sandro

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