JLabel上的java显示交互式循环覆盖
我有一个JFrame,其中包含一个显示BuffereImage的JLabel。 当我将鼠标悬停在这张图片上时,我需要在包含另一张图片的鼠标上显示一个圆形覆盖
到目前为止,我的代码是:
JFrame frame = new JFrame();
GridBagLayout layout = new GridBagLayout();
frame.getContentPane().setLayout(gLayout);
JLabel myLabel= new JLabel(new ImageIcon(baseImage));
GridBagConstraints constraints = new GridBagConstraints();
...
frame.getContentPane().add(myLabel, constraints);
现在我需要在显示另一个BuffereImage的鼠标位置显示一个圆形覆盖
所以我需要这样的东西:
myLabel.onMouseHover(event -> {
Pane p = new Pane();
x = event.x;
y = event.y;
p.setImage(newImage);
// draw this pane on the label but with an offset for it to be at the center
myLabel.draw(pane, x - offset, y - offset);
})
# 1 楼答案
如果我理解正确的话,那么你需要一种“透明”的风格效果。事件如果您不这样做,并且希望在鼠标点处显示静态图像,“基本”想法将起作用,您只需将覆盖图像重新定位到正确的位置即可
本例采用两个大小相同的图像,当您移动鼠标时,它将使其看起来好像您正在“看穿”主图像。这是幻觉,但大多数像这样的效果都是幻觉
不,没有。
JLabel
是一种痛苦的。。。密码没有办法确定图像的位置,假设这对你很重要,但在大多数情况下,我更喜欢控制。你可以用JLabel
做类似的事情,从概念上讲,这是相同的想法另一种解决方案可能是直接在目标组件顶部使用一种类型的“覆盖”面板,例如
或者,您可以直接使用帧的
glassPane
,但需要驱动器AnnndJLayer style concept-当然,它允许您绘制点,但它应该提供使图像在顶部移动所需的内容