【发布时间】:2014-01-15 19:47:43
【问题描述】:
我有一个应用程序,它基本上使用 JTextPane 作为多行标签,可以将文本居中并自动换行(居中是我不使用较轻组件的原因,但 JTextArea 会有同样的问题) .它用作较大实体的一部分,该实体应使用一个工具提示。但是,为包含组件设置工具提示不适用于JTextPane。其他组件按预期显示工具提示。
SSCCE:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.text.BadLocationException;
public class ToolTipTest {
ToolTipTest() {
JFrame frame = new JFrame("Tool tip test");
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel bg = new JPanel(new BorderLayout());
frame.add(bg);
bg.add(new JLabel("Tooltip shows here"), BorderLayout.NORTH);
JTextPane text = new JTextPane();
try {
text.getStyledDocument().insertString(0, "Lorem ipsum dolor sit"
+ " amet, consectetur adipiscielit, sed eiusmod tempor"
+ " incidunt ut labore et dolore magna aliqua.", null);
} catch (BadLocationException e) {
e.printStackTrace();
}
text.setEditable(false);
text.setFocusable(false);
bg.add(text);
bg.setToolTipText("A tooltip, that should show on both the label and the text");
// Works, but is ugly and results in visible change in tooltip when
// moving cursor between components
// text.setToolTipText("A tooltip, that should show on both the label and the text");
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ToolTipTest();
}
});
}
}
在上面的示例中,工具提示显示在JLabel 上,但不在JTextPane 上。我目前正在为文本窗格设置相同的工具提示文本作为解决方法,但是当用户将鼠标光标移动到组件顶部时,这会导致工具提示之间的可见切换。
有没有办法在JTextPane上显示父组件的工具提示?
编辑:
按照 cmets 中的建议,我尝试覆盖 getToolTipText() 方法并使用工具提示管理器注册组件。这有效,因为文本窗格然后从父级获取工具提示文本。但是,视觉效果与我的解决方法完全相同。
【问题讨论】:
-
我想知道这是否需要继承,如果覆盖
getToolTipText()和getToolTipText(MouseEvent event)并返回父级的工作。我没有测试过这个。 -
@HovercraftFullOfEels 不工作,很遗憾。
-
您可能需要向工具提示管理器注册组件才能触发 getToolTipText 方法
-
@MadProgrammer 这确实有所作为,谢谢。不幸的是,它对我想要解决的问题没有帮助。也就是说,它再次导致两个不同的工具提示。
-
问题是,
ToolTipManager在每个组件上注册了一个MouseListener,所以它跟踪mouseEnter和mouseExit以及mouseMove事件。不确定您是否可以防止这种情况发生
标签: java swing tooltip jtextpane