当前位置: 首页 > 面试题库 >

setToolTipText消耗鼠标事件的解决方法?

钮鸿煊
2023-03-14
问题内容

这似乎是SWING的已验证问题

http://forums.sun.com/thread.jspa?threadID=385730

我目前正在尝试在中设置选项卡的工具提示文本,JTabbedPane但是当我这样做时,我实际上无法再选择该选项卡,因为该工具提示添加了使用事件的鼠标侦听器。

有谁知道一种解决方法,可以让我保留工具提示和鼠标事件?谢谢。

根据要求,这是我的SSCCE

package jtabbedbug;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;

public class JTabBug{

    public static void main(String[] args) {

      JTabbedPane jTabbedPane = new JTabbedPane();
      jTabbedPane.addTab("Red", new JLabel("Roses"));
      jTabbedPane.addTab("Blue", new JLabel("Skies"));
      jTabbedPane.addTab("Green", new JLabel("Grass"));

      for (int i = 0; i < jTabbedPane.getTabCount(); i++) {
        JLabel tabComponent = new JLabel(jTabbedPane.getTitleAt(i));
        tabComponent.setToolTipText("Tip: " + tabComponent.getText());
        jTabbedPane.setTabComponentAt(i, tabComponent);
      }

      JFrame jFrame = new JFrame("Testing");
      jFrame.add(jTabbedPane);
      jFrame.setSize(400, 500);
      jFrame.setVisible(true);
      jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}

问题答案:

这是一种解决方法:

import javax.swing.*;
import javax.swing.plaf.*;
import java.awt.event.*;

public class JTabBug{

    public static void main(String[] args) {

      JTabbedPane jTabbedPane = new JTabbedPane()
      {
        @Override
        public String getToolTipText(MouseEvent e)
        {
            int index = ((TabbedPaneUI)ui).tabForCoordinate(this, e.getX(), e.getY());

            if (index != -1)
            {
                JComponent component = (JComponent)getTabComponentAt(index);
                return component.getToolTipText();
            }

            return super.getToolTipText(e);
        }
      };
      ToolTipManager.sharedInstance().registerComponent(jTabbedPane);
      jTabbedPane.addTab("Red", new JLabel("Roses"));
      jTabbedPane.addTab("Blue", new JLabel("Skies"));
      jTabbedPane.addTab("Green", new JLabel("Grass"));

      for (int i = 0; i < jTabbedPane.getTabCount(); i++) {
        JLabel tabComponent = new JLabel(jTabbedPane.getTitleAt(i));
        tabComponent.setToolTipText("Tip: " + tabComponent.getText());
        ToolTipManager.sharedInstance().unregisterComponent(tabComponent);
        jTabbedPane.setTabComponentAt(i, tabComponent);
      }

      JFrame jFrame = new JFrame("Testing");
      jFrame.add(jTabbedPane);
      jFrame.setSize(400, 500);
      jFrame.setVisible(true);
      jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}


 类似资料:
  • 本文向大家介绍vue 解除鼠标的监听事件的方法,包括了vue 解除鼠标的监听事件的方法的使用技巧和注意事项,需要的朋友参考一下 描述:在移动端中,我们的首页tab会缓存一些点击事件,比如在机构页面点开了下拉框==》在切换到赛事页面==》在切换回机构页面发现下拉款已经缓存了,是下拉的状态 1. 2. 3. 解决:每次滑动到别的页面的时候就需要解除绑定的点击事件 做法: 1- 首先给父盒子添加 指令:

  • 在本章中,我们将详细介绍鼠标事件及其属性。 请注意:此类事件不仅可能来自于“鼠标设备”,还可能来自于对此类操作进行了模拟以实现兼容性的其他设备,例如手机和平板电脑。 鼠标事件类型 我们已经见过了其中一些事件: mousedown/mouseup 在元素上点击/释放鼠标按钮。 mouseover/mouseout 鼠标指针从一个元素上移入/移出。 mousemove 鼠标在元素上的每个移动都会触发此

  • 鼠标事件的种类 鼠标事件指与鼠标相关的事件,继承了MouseEvent接口。具体的事件主要有以下一些。 click:按下鼠标(通常是按下主按钮)时触发。 dblclick:在同一个元素上双击鼠标时触发。 mousedown:按下鼠标键时触发。 mouseup:释放按下的鼠标键时触发。 mousemove:当鼠标在一个节点内部移动时触发。当鼠标持续移动时,该事件会连续触发。为了避免性能问题,建议对该

  • 就像前几节介绍的那样,Cocos2d-x 支持响应鼠标事件 创建鼠标事件监听器: _mouseListener = EventListenerMouse::create(); _mouseListener->onMouseMove = CC_CALLBACK_1(MouseTest::onMouseMove, this); _mouseListener->onMouseUp = CC_CALLBA

  • 在JavaScript中,为DOM元素附加事件非常容易。本节就以Canvas为例,介绍鼠标事件的响应方法。 本节的例程创建包含了一个Canvas的页面,当鼠标在Canvas上移动时将调用C函数,输出光标在Canvas中的坐标及该坐标处的像素的颜色(RGBA)值。 html部分代码如下: //canvas_mouse_event.html <canvas></canvas> <scr

  • 本文向大家介绍python+selenium 鼠标事件操作方法,包括了python+selenium 鼠标事件操作方法的使用技巧和注意事项,需要的朋友参考一下 一、前言 除了可以使用 click( ) 来模拟鼠标的单击操作,现在Web产品中还提供了更丰富的鼠标交互方式,例如鼠标右键、双击、悬停、拖动等功能,在WebDriver中,将这些关于鼠标操作的方法都封装在 ActionChains 类中。