JTextField
(またはそれに関係なくJComponent
)を指定すると、ユーザーからの直接的な入力イベントなしに、そのコンポーネントの指定されたツールチップがどのように表示されますか?つまり、なぜJComponent.setTooltipVisible(boolean)
が存在しないのですか?Java Tooltipを表示させる
答えて
ツールチップを表示するには、デフォルトのアクションを呼び出す必要があります。たとえば、コンポーネントの利益はあなたがコンポーネントに次のFocusListenerを追加することができます焦点を当てたときにツールチップを表示する:
FocusAdapter focusAdapter = new FocusAdapter()
{
public void focusGained(FocusEvent e)
{
JComponent component = (JComponent)e.getSource();
Action toolTipAction = component.getActionMap().get("postTip");
if (toolTipAction != null)
{
ActionEvent postTip = new ActionEvent(component, ActionEvent.ACTION_PERFORMED, "");
toolTipAction.actionPerformed(postTip);
}
}
};
を編集:
上記のコードは、もはや動作していないようです。別のアプローチは、コンポーネントにMouseEventの派遣である:それはコンポーネントを入力するマウスをシミュレートして、ツールチップが表示される前に
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PostTipSSCCE extends JPanel
{
public PostTipSSCCE()
{
FocusAdapter fa = new FocusAdapter()
{
public void focusGained(FocusEvent e)
{
JComponent component = (JComponent)e.getSource();
MouseEvent phantom = new MouseEvent(
component,
MouseEvent.MOUSE_MOVED,
System.currentTimeMillis(),
0,
10,
10,
0,
false);
ToolTipManager.sharedInstance().mouseMoved(phantom);
}
};
JButton button = new JButton("Button");
button.setToolTipText("button tool tip");
button.addFocusListener(fa);
add(button);
JTextField textField = new JTextField(10);
textField.setToolTipText("text field tool tip");
textField.addFocusListener(fa);
add(textField);
JCheckBox checkBox = new JCheckBox("CheckBox");
checkBox.setToolTipText("checkbox tool tip");
checkBox.addFocusListener(fa);
add(checkBox);
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("PostTipSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(new PostTipSSCCE()));
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}
このアプローチは、わずかな遅延が発生します。ツールチップをすぐに表示するには、pstantonのソリューションを使用します。私が見つけた
(独自のツールチップウィンドウを作成する以外に)唯一の方法は、焦点にCTRL + F1キーストロークをemmulateすることです:
new FocusAdapter()
{
@Override
public void focusGained(FocusEvent e)
{
try
{
KeyEvent ke = new KeyEvent(e.getComponent(), KeyEvent.KEY_PRESSED,
System.currentTimeMillis(), InputEvent.CTRL_MASK,
KeyEvent.VK_F1, KeyEvent.CHAR_UNDEFINED);
e.getComponent().dispatchEvent(ke);
}
catch (Throwable e1)
{e1.printStackTrace();}
}
}
残念ながら、ツールチップはできるだけ早くあなたのマウスを移動すると消えます(部品の外側)または遅れた後(ToolTipManager.setDismissDelay
を参照)。
+1、私の元の提案は、 "postTip"アクションを呼び出すF1キーに基づいていました。 KeyEventを送出するのではなく、Actionを直接呼び出す方がきれいだったと思いました。なぜそれがもう動作しないのか分かりません。 – camickr
ツールチップは本当にひどくjava imoで実装されています。非常に柔軟性がない。そのようなハッキングが必要である(そして必要なものをほとんど達成しない)ことは、APIが欠けていることを示している。 – pstanton
Ctrl + F1プラットフォームは独立していますか? Windowsと同じMacでも動作するはずですか? –
ToolTipManager
にアクセスし、初期遅延を0に設定してイベントを送信します。後で値を復元することを忘れないでください。私にとって
private void displayToolTip()
{
final ToolTipManager ttm = ToolTipManager.sharedInstance();
final MouseEvent event = new MouseEvent(this, 0, 0, 0,
0, 0, // X-Y of the mouse for the tool tip
0, false);
final int oldDelay = ttm.getInitialDelay();
final String oldText = textPane.getToolTipText(event);
textPane.setToolTipText("<html><a href='http://www.google.com'>google</a></html>!");
ttm.setInitialDelay(0);
ttm.setDismissDelay(1000);
ttm.mouseMoved(event);
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
ttm.setInitialDelay(oldDelay);
textPane.setToolTipText(oldText);
}
}, ttm.getDismissDelay());
}
(代わりに、タイマーの私はSwingUtilitiesとinvokeLaterのアプローチを使用)上記で述べたと同様のバージョンで動作します:
private void showTooltip(Component component)
{
final ToolTipManager ttm = ToolTipManager.sharedInstance();
final int oldDelay = ttm.getInitialDelay();
ttm.setInitialDelay(0);
ttm.mouseMoved(new MouseEvent(component, 0, 0, 0,
0, 0, // X-Y of the mouse for the tool tip
0, false));
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
ttm.setInitialDelay(oldDelay);
}
});
}
それはToolTip
ではありませんが、あなたはバルーンヒントを使用することができます http://timmolderez.be/balloontip/doku.php
それだけでコールに示すと、いくつかの瞬間に、より良い感じている、あなたはあなたがトン望むわけToolTip
ツールチップとは異なり、これらのバルーンは対象コンポーネントを含むウィンドウを終了できません。 –
- 1. Java get tooltip info
- 2. ace tooltipグローバルに動的データを表示
- 3. Java get mouseover tooltip text
- 4. カスタムlint Android-Studio-tooltipに説明が表示されない
- 5. jquery tooltip()がまったく表示されない
- 6. JAVA JTextFieldが表示されません
- 7. 角度材質2 Md-Tooltip with条件付き表示
- 8. ユーザ入力をJavaのドットで表示させるには
- 9. Java Swingを表示できません
- 10. Java、マウスイベントでパネルが表示される
- 11. IEで表示される背景は他のブラウザでは表示されません.. Java設定
- 12. ブラウザとしてHTMLを表示すると、Javaが表示される -
- 13. 非表示にしてスタートアップフォームを再度表示させる
- 14. Java - アプレットは単に表示されませんか?
- 15. Javaボタンが表示されていませんか?
- 16. Java - JFrame、JPanel、コンポーネントは表示されません
- 17. Javaパネルで描画 - 何も表示されません
- 18. グラフィックはJavaのゲームには表示されません
- 19. Java Swing:ImageIconがEclipseに表示されませんか?
- 20. Selenium WebDriver Java - 要素が表示されません。
- 21. Javaスキャナとintには年齢が表示されません
- 22. Javaスクリプトのスライドショーではスライドが表示されません
- 23. 私のJPanel上のものが表示されません。 JAVA
- 24. Java - GUIコンポーネントが表示されません
- 25. 画像が表示されません.. Java
- 26. KotlinにJava Lombokアクセサが表示されませんか?
- 27. pdfダウンロードダイアログウィンドウがブラウザに表示されません。 extjs 4 with java
- 28. Android SDKインストーラにはJavaが表示されません
- 29. Javaスイングローダーイメージが正しく表示されていませんか?
- 30. AngularJS Material Clickable Tooltip
デフォルト彼はツールチップを連続して見ることができますか?これはツールチップが使用されるものではないからです... – MirroredFate