这似乎是SWING的已验证问题
http://forums.sun.com/thread.jspa?threadID=385730
我目前正在尝试在中设置选项卡的工具提示文本,JTabbedPane但是当我这样做时,我实际上无法再选择该选项卡,因为该工具提示添加了使用事件的鼠标侦听器。
有谁知道一种解决方法,可以让我保留工具提示和鼠标事件?谢谢。
根据要求,这是我的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); } }
这是一种解决方法:
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); } }