我有一個應用程序,它基本上使用JTextPane
作爲一個多行標籤,可以將文本居中並自動換行(居中是我不使用較輕組件的原因,但JTextArea
會有同樣的問題)。它被用作較大實體的一部分,它應該使用一個工具提示。但是,設置包含組件的工具提示不適用於JTextPane
。其他組件按預期顯示工具提示。在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
上顯示父組件的工具提示?
編輯: 我試圖重寫方法和註冊與刀尖管理器的組件,如意見提出。這是有效的,因爲文本窗格從父節點獲取工具提示文本。但是,視覺效果與我的解決方法完全相同。
,我不知道這是否會需要繼承,如果覆蓋'getToolTipText()'和'getToolTipText(MouseEvent事件)'並返回父項的工作。我沒有測試過這個。 –
@HovercraftFullOfEels不幸的是,不行。 – kiheru
您可能需要向工具提示管理器註冊組件,以便它觸發getToolTipText方法 – MadProgrammer