有没有办法将当前显示的工具提示作为字符串复制到剪贴板,而没有复杂的XY坐标计算映射到工具提示文本区域?这在具有以角度显示的工具提示的图表上尤其具有挑战性,也仅在显示时捕获。例如,要获取 ctl-c 将显示工具提示复制到剪贴板:
isLoggedIn$: Observable<boolean>;
也许有一些事件显示工具提示,所以我可以存储一个字符串指针并在输入 ctl-c 时使用?
答案 0 :(得分:2)
显示工具提示以响应图表所附的ChartPanel
收到的鼠标事件。要在鼠标移动时将当前显示的工具提示复制到剪贴板,
在图表面板中添加ChartMouseListener
,如图here所示。
当听众看到所需的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);
}
key binding中可以使用类似的方法,如here所示。使用图表面板getMousePosition()
构建所需的MouseEvent
触发器。
获取图表面板的InputMap
,ActionMap
以及平台的快捷方式屏幕。
InputMap im = chartPanel.getInputMap();
ActionMap am = chartPanel.getActionMap();
int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
将所需的KeyStroke
放入图表面板中InputMap
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, mask), "copytip");
将相应的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);
}
});
避免KeyListener
,因为需要键盘焦点。