获取当前显示的工具提示

时间:2017-08-18 18:19:49

标签: java swing clipboard jfreechart

有没有办法将当前显示的工具提示作为字符串复制到剪贴板,而没有复杂的XY坐标计算映射到工具提示文本区域?这在具有以角度显示的工具提示的图表上尤其具有挑战性,也仅在显示时捕获。例如,要获取 ctl-c 将显示工具提示复制到剪贴板:

isLoggedIn$: Observable<boolean>;  

也许有一些事件显示工具提示,所以我可以存储一个字符串指针并在输入 ctl-c 时使用?

example of a tooltip to capture

1 个答案:

答案 0 :(得分:2)

显示工具提示以响应图表所附的ChartPanel收到的鼠标事件。要在鼠标移动时将当前显示的工具提示复制到剪贴板,

  1. 在图表面板中添加ChartMouseListener,如图here所示。

  2. 当听众看到所需的ChartEntity时,请向ChartPanel询问相关文字并将其复制到剪贴板。

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Clipboard clipboard = toolkit.getSystemClipboard();
    …
        @Override
        public void chartMouseMoved(ChartMouseEvent cme) {
            …
            String t = chartPanel.getToolTipText(cme.getTrigger());
            clipboard.setContents(new StringSelection(t), null);
        }
    
  3. key binding中可以使用类似的方法,如here所示。使用图表面板getMousePosition()构建所需的MouseEvent触发器。

    1. 获取图表面板的InputMapActionMap以及平台的快捷方式屏幕。

      InputMap im = chartPanel.getInputMap();
      ActionMap am = chartPanel.getActionMap();
      int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
      
    2. 将所需的KeyStroke放入图表面板中InputMap

      im.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, mask), "copytip");
      
    3. 将相应的Action放入图表面板中ActionMap

      am.put("copytip", new AbstractAction() {
          @Override
          public void actionPerformed(ActionEvent e) {
              Point p = chartPanel.getMousePosition();
              String t = chartPanel.getToolTipText(new MouseEvent(chartPanel,
                  0, System.currentTimeMillis(), 0, p.x, p.y, 0, false));
              clipboard.setContents(new StringSelection(t), null);
          }
      });
      
    4. 避免KeyListener,因为需要键盘焦点。