我创建了一个名为FAdjacentTooltips
的组件,它显示有关另一个JComponent(JLabel,JPanel ...)的信息,当鼠标进入此组件时,当鼠标退出时消失,这里是事件初始化FAdjacentToolTips
类:
this.holderComponent.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
FAdjacentToolTips.this.setSize(0, 0);
FAdjacentToolTips.this.revalidate();
FAdjacentToolTips.this.repaint();
}
@Override
public void mouseEntered
(MouseEvent e) {
if (!activationFlag) {
FAdjacentToolTips.this.build();
activationFlag = true;
}
FAdjacentToolTips.this.setSize(toolTypeWidth, toolTypeHeight);
FAdjacentToolTips.this.revalidate();
FAdjacentToolTips.this.repaint();
}
});
当鼠标进入JComponent:holderComponent
时,FAdjacentToolTips设置为给定大小,当鼠标退出holderComponent
时,FAdjacentToolTips大小设置为零。
将FAdjacentToolTips
添加到一个组件时效果很好,但有问题
当它添加到两个Adjacents JComponents(一个接近另一个)时,这是一个带有两个JLabel的例子
public static void main(String[] args) throws FileNotFoundException, IOException {
JFrame frame = new JFrame();
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
frame.setMinimumSize(new Dimension(1280, 700));
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLayout(new BorderLayout());
CustomLabel firstLabel = new CustomLabel("first Label", Color.yellow);
firstLabel.setLocation(100, 100);
CustomLabel secondeLabel = new CustomLabel("second Label", Color.blue);
secondeLabel.setLocation(100, 300);
JPanel panel = new JPanel(null);
panel.setOpaque(true);
panel.setPreferredSize(new Dimension(2000, 2000));
panel.setBackground(Color.red);
panel.add(secondeLabel);
panel.add(firstLabel);
firstLabel.addFAdjacentToolTip("AAAAAAAA", FAdjacentToolTipable.LEFT_OF_CONTAINER);
secondeLabel.addFAdjacentToolTip("BBBBB", FAdjacentToolTipable.LEFT_OF_CONTAINER);
panel.setPreferredSize(new Dimension(2000, 2000));
frame.getRootPane().getContentPane().add(panel, BorderLayout.CENTER);
frame.setVisible(true);
}
class CustomLabel extends JLabel implements FAdjacentToolTipable {
public CustomLabel(String text, Color color) {
super(text);
this.setSize(new Dimension(200, 200));
this.setOpaque(true);
this.setBackground(color);
}
@Override
public void addFAdjacentToolTip(String text, int side) {
FAdjacentToolTips fAdjacentToolTips = new FAdjacentToolTips(this, text, side, Color.WHITE, Color.BLACK, Color.black, this.getFont());
fAdjacentToolTips.activate();
}
}
firstLabel位于secondLabel的顶部,这是问题行为:
将鼠标从外部移动到其中一个标签时效果很好,当鼠标进入/退出标签时,FAdjacentToolTips显示/消失
将鼠标从firstLabel
移动到secondLabel
时,firstLabel FAdjacentToolTips会消失(根据需要),但secondLabel
FAdjacentToolTips不会出现。
即使FAdjacentToolTips没有显示在屏幕上,也会调用mouseEnter方法,并且大小设置正确。
我的问题是:为什么FAdjacentToolTips在从一个标签移动到另一个标签时不显示,即使事件被很好地触发,并且大小设置正确?
这是一个测试程序的可运行程序: 这是源代码:http://www.filedropper.com/javatest 这是runnable:http://www.filedropper.com/javatest_1
了解我的问题: 1 - 尝试将鼠标从JFrame移动到其中一个标签。 2 - 尝试将鼠标从一个标签移动到另一个标签
如果您需要更多信息,请告诉我。