gpt4 book ai didi

java - 将两个图像以网格布局放置在玻璃板下?

转载 作者:行者123 更新时间:2023-12-02 04:25:20 25 4
gpt4 key购买 nike

希望您今天过得愉快。我有一个涉及玻璃板的基本java问题。我有两个图像,采用网格布局,我试图将它们以及它们的单独布局管理器放在玻璃 Pane 下,并保留一个 JLabel (这意味着跟随鼠标)玻璃板。我已经尝试过多次,但每次所有组件都会进入玻璃板下方。这是我的代码:

package Buttons;


import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Giraffewindow extends JDialog {
public Giraffewindow() {
JDialog giraffewindow = new JDialog();

Icon giraffe = new ImageIcon(getClass().getResource("giraffe.png"));
Icon windows = new ImageIcon(getClass().getResource("windows.png"));

giraffewindow.setLayout(new GridLayout(1, 2, 0, 0));
giraffewindow.add(new JLabel(windows));
giraffewindow.add(new JLabel(giraffe));


giraffewindow.pack();
giraffewindow.setTitle("GIRAFFE!");
giraffewindow.setVisible(true);
giraffewindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JPanel glass = ((JPanel) giraffewindow.getGlassPane());
glass.setVisible(true);
status = new JLabel("I can change");

giraffewindow.add(status);
giraffemousehandler giraffemouse = new giraffemousehandler();
giraffewindow.addMouseListener(giraffemouse);
giraffewindow.addMouseMotionListener(giraffemouse);
setLayout(null);
}


JLabel status = null;

class giraffemousehandler extends MouseAdapter implements MouseListener, MouseMotionListener { //MouseAdapter makes it so that you don't have to have all 7 implemented mouse listener methods

@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
status.setBounds(e.getX(), e.getY(), 50, 60); //Makes JLabel follow mouse

}

@Override
public void mouseEntered(MouseEvent e) {

status.setText("Entered");

}

@Override
public void mouseExited(MouseEvent e) {

status.setText("exited");

}

}
}

非常感谢您花时间帮助我!

最佳答案

有一系列问题,大多数只会引起困惑,但是......

 giraffewindow.add(status);

基本上,您将 status 标签添加到 JDialog 而不是 glasspane...

我会避免扩展 JDialog,当您只是创建另一个对话框时,这会进一步严重混淆问题。

另一个问题是您将鼠标监听器添加到对话框中,这没关系,但我假设您想知道鼠标何时移动超出一个或多个图像的范围,这意味着您需要添加鼠标监听器以及标签。

由于 GridLayout 的工作方式,您永远不会在很长一段时间内真正“退出”其中一个组件;)

由于 MouseEvent 现在将在标签的上下文中生成,因此您现在需要将事件的 Point 转换回玻璃 Pane 的上下文

关于java - 将两个图像以网格布局放置在玻璃板下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com