gpt4 book ai didi

java - tooltipText bug 导致 JMenuItem 失去焦点

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:25 26 4
gpt4 key购买 nike

我正在开发 Java Swing GUI,并且弹出菜单项上的工具提示文本存在一个小问题。

基本上,当您将鼠标悬停在 JMenuItem 上时,它应该保持选中 JMenuItem 并显示所需的工具提示文本。

实际发生的情况是,当工具提示文本可见时,StateChange 事件似乎会导致相关的 JMenuItem 失去选择状态,因此工具提示文本很快就会消失。请注意,这仅在第一次发生,如果您移动鼠标,您可以再次选择JMenuItem,并且它也会正确显示工具提示文本。我可以保留这个,但我希望通过 ToolTipManager 的 shareInstance() 设置延迟,这会损害用户友好的一面,因为用户自己意识到问题后必须等待两倍的时间。

我构建了一个非常简单的演示,反射(reflect)了我所看到的问题,我是否遗漏了某些内容,或者这只是 Java 8 与 Mac 的问题?

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);
}
}

最佳答案

作为引用,我尝试了在 event dispatch thread 上运行的修改版本。 。它似乎有所改善,但仍然间歇性失败。看起来像是一种回归。

控制台:

$ javac TestFrame.java ; java TestFrame1.8.0_3110.9.5…

Code:

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.event.ChangeEvent;

/** @see http://stackoverflow.com/a/28160300/230513 */
public class TestFrame {

public static void main(String[] args) {
System.out.println(System.getProperty("java.version"));
System.out.println(System.getProperty("os.version"));
EventQueue.invokeLater(() -> {
JFrame jf = new JFrame();
JPanel jp = new JPanel();
JPopupMenu p = new JPopupMenu();
JMenuItem jmi = new JMenuItem("An option");
jmi.setToolTipText("Mouse over text");
jmi.addChangeListener((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.pack();
jf.setSize(320, 240);
jf.setVisible(true);
});
}
}

关于java - tooltipText bug 导致 JMenuItem 失去焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28159410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com