Это, кажется, проверенная проблема с SWING
http://forums.sun.com/thread.jspa?threadID=385730
Я в настоящее время пытаюсь установить текст всплывающей подсказки вкладки в a JTabbedPane
но когда я делаю я не могу на самом деле больше выбирать вкладку, потому что подсказка добавила слушателя мыши, который использует события.
Кто-либо знает об обходном решении, которое позволяет мне сохранять свои подсказки И свой mouseevents?Спасибо.
Согласно запросу вот мой 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);
}
}
Похоже, работает без каких-либо проблем (под Java 6). Вот мой код:
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);
}
});
}
}