2010-07-07 8 views
5

Esto parece ser un problema verificado con OSCILACIÓNSolución para setToolTipText consumir eventos de ratón?

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

Actualmente estoy tratando de establecer el texto de sugerencia de una ficha en un JTabbedPane pero cuando lo hago en realidad no puedo seleccionar la pestaña más porque la información sobre herramientas agregó un detector de mouse que está consumiendo los eventos.

¿Alguien sabe de una solución que me permite mantener mis información sobre herramientas y mi MouseEvents? Gracias.

Según la petición aquí es mi SSCCE

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

dudo la información sobre herramientas está consumiendo el evento de ratón. Una pestaña se selecciona con un clic del mouse. Los eventos mouseMoved de mouseEntered generan una información sobre herramientas. Publique su SSCCE (http://sscce.org) mostrando el problema. – camickr

+0

OK He agregado mi SSCCEE mostrando el problema. – Sandro

+0

Veo lo que quiere decir, el SSCCE aclaró la pregunta. – camickr

Respuesta

4

Aquí hay una solución:

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

Impresionante. Aunque está lejos de ser ideal, consigue el trabajo. ¡Gracias! – Sandro

1

parece estar funcionando sin ningún problema (en Java 6). Aquí está mi código:

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

Perdón por hacerle pasar ese problema. Estoy usando un componente de pestaña personalizado, y dar una información sobre herramientas está causando problemas. – Sandro

Cuestiones relacionadas