1
我正在使用Java Swing GUI,并且弹出菜单项上的工具提示文本存在小问题。tooltipText错误导致JMenuItem失去焦点
基本上,当鼠标悬停在JMenuItem的它应该离开该JMenuItem的选择并显示期望的工具提示文本。
实际上会发生什么事是当工具提示文本由可见StateChange事件似乎造成相关的JMenuItem失去选择状态等工具提示文本很快消失。请注意,这只是第一次发生,如果您移动鼠标,可以再次选择JMenuItem并且它也会正确显示工具提示文本。我可以离开这个,但是我希望通过ToolTipManager的sharedInstance()来设置一个延迟,此时会损害用户友好的一面,因为用户在自己意识到问题之后必须等待两次。
我构建了一个非常简单的演示,反映了我所看到的问题,我是否错过了某些东西,或者这仅仅是一个带有Mac问题的Java 8?
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class TestFrame {
static JFrame jf = new JFrame();
public static void main(String[] args){
jf = new JFrame();
JPanel jp = new JPanel();
jp.setBackground(Color.white);
jp.setForeground(Color.black);
JPopupMenu p = new JPopupMenu();
JMenuItem jmi = new JMenuItem("An option");
jmi.setToolTipText("mouse over text");
jmi.addChangeListener(new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
System.out.println("CHANGED by: "+e.getSource().toString());
}});
p.add(jmi);
jp.setComponentPopupMenu(p);
jf.add(jp);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.setSize(1000, 500);
jf.setPreferredSize(jf.getSize());
jf.setVisible(true);
}
}
谢谢,是啊,让我的机器上同样的结果。猜猜它提交bug报告的时间? – Tdiddy 2015-01-27 00:28:53
@trashgod [我找到一个有趣的例子](http://www.coderanch.com/t/645179/GUI/java/fireTableDataChanged-working) – mKorbel 2015-01-27 06:30:19