Java 如何在JFrame的内部框架中单击,而不使用按钮
我目前正在使用内部框架制作应用程序,我不想在内部框架中使用按钮。我希望它了解我点击的位置(特定坐标),并根据点击的位置完成操作 这是一个内部框架,我目前正试图让他鼠标点击注册Java 如何在JFrame的内部框架中单击,而不使用按钮,java,swing,Java,Swing,我目前正在使用内部框架制作应用程序,我不想在内部框架中使用按钮。我希望它了解我点击的位置(特定坐标),并根据点击的位置完成操作 这是一个内部框架,我目前正试图让他鼠标点击注册 package com.xxemu.main; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.ImageIcon;
package com.xxemu.main;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
public class Techni extends JInternalFrame implements InternalFrameListener, MouseListener {
private static final long serialVersionUID = -7905672790566329537L;
static int openFrameCount = 0;
private ImageIcon image;
private JLabel label;
private Menu menu;
public int frame = 1;
static final int xOffset = 75, yOffset = 90;
public Techni() {
super("emu",
true, //resizable
true, //closable
true, //maximizable
true); //iconifiable
//setSize(783, 522);
setSize(400, 400);
setLocation(xOffset, yOffset);
}
public void setLayeredPane(JLayeredPane layered) {
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.out.println("asdfsd");
if (e.getX() < 0 && e.getY() > 0) {
System.out.println("test");
}
}
});
}@Override
public void internalFrameActivated(InternalFrameEvent arg0) {}
@Override
public void internalFrameClosed(InternalFrameEvent arg0) {}
@Override
public void internalFrameClosing(InternalFrameEvent arg0) {}
@Override
public void internalFrameDeactivated(InternalFrameEvent arg0) {}
@Override
public void internalFrameDeiconified(InternalFrameEvent arg0) {}
@Override
public void internalFrameIconified(InternalFrameEvent arg0) {}
@Override
public void internalFrameOpened(InternalFrameEvent arg0) {}@Override
public void mouseEntered(MouseEvent e) {}@Override
public void mouseExited(MouseEvent e) {}@Override
public void mousePressed(MouseEvent e) {}@Override
public void mouseReleased(MouseEvent e) {}@Override
public void mouseClicked(MouseEvent e) {}
}
您可以将
MouseListener
添加到组件
实例中,该实例具有带有x和y坐标的mouseClicked
事件
例如:
component.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int xOnScreen = e.getXOnScreen();
int y = e.getY();
int yOnScreen = e.getYOnScreen();
}
});
我在编写GUI时使用了一种方法,该GUI在一个框架内显示鼠标坐标
private static void debugMousePosition(JFrame frame) {
final JFrame box = new JFrame("Mouse Position");
box.setAlwaysOnTop(true);
box.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
box.setLocation(frame.getX() + 800,frame.getY());
box.setSize(300, 100);
box.setLayout(new GridLayout(1,2));
box.setVisible(true);
final JLabel X = new JLabel();
final JLabel Y = new JLabel();
frame.addMouseMotionListener(new MouseAdapter() {
public void mouseMoved(MouseEvent me) {
X.setText(String.valueOf("X Position: " + me.getX()));
Y.setText(String.valueOf("Y Position: " + me.getY()));
box.repaint();
}
});
box.add(X);
box.add(Y);
}
将要监视的帧传递给debugMousePosition()方法
似乎您希望使用MouseActionListener来查看用户何时单击,然后onClick将从MouseMotionListener获取鼠标信息。大概是
frame.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e)
{
if(e.getX() == someVariable && e.getY() == anotherVariable)
{
do something here
}
}
});
如果您需要更多的功能,比如当鼠标离开框架时,请查看该类以查看它拥有的其他方法
当您实现诸如InternalFrameListener之类的类时,需要您重写其中包含的方法。与此相反,请尝试只导入适配器版本,并在需要时从中创建新的适配器。就像我上面的代码一样,您可以使用InternalFrameAdapter执行类似的操作
以下是我建议你们的班级的样子:
package com.xxemu.main;
import java.awt.Menu;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
public class Techni extends JInternalFrame
{
private static final long serialVersionUID = -7905672790566329537L;
static int openFrameCount = 0;
private ImageIcon image;
private JLabel label;
private Menu menu;
public int frame = 1;
static final int xOffset = 75, yOffset = 90;
public Techni()
{
super("emu",
true, //resizable
true, //closable
true, //maximizable
true);//iconifiable
//setSize(783, 522);
setSize(400, 400);
setLocation(xOffset, yOffset);
}
public void setLayeredPane(JLayeredPane layered)
{
addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
System.out.println("asdfsd");
if (e.getX() < 0 && e.getY() > 0)
{
System.out.println("test");
}
}
});
}
}
package com.xxemu.main;
导入java.awt.Menu;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入javax.swing.ImageIcon;
导入javax.swing.JInternalFrame;
导入javax.swing.JLabel;
导入javax.swing.JLayeredPane;
公共类Techni扩展JInternalFrame
{
私有静态最终长serialVersionUID=-7905672790566329537L;
静态int openFrameCount=0;
私有图像图标图像;
私人标签;
私人菜单;
公共int帧=1;
静态最终int xOffset=75,yOffset=90;
公共技术()
{
超级(“emu”,
true,//可调整大小
true,//可关闭
true,//可最大化
true);//可图标化
//设置大小(783522);
设置大小(400400);
设置位置(xOffset,yOffset);
}
公共void setLayeredPane(JLayeredPane分层)
{
addMouseListener(新的MouseAdapter()
{
@凌驾
公共无效mouseClicked(MouseEvent e)
{
System.out.println(“asdfsd”);
如果(e.getX()<0&&e.getY()>0)
{
系统输出打印(“测试”);
}
}
});
}
}
我可能创建了错误的框架,但我必须扩展JFrame和JInternalFrame,因此我无法扩展MouseAdapter。您不需要将其添加到类声明中,只需包含一个导入(import java.awt.event.MouseAdapter;
)并将上面的代码用作处理的模板,我只是在代码中遗漏了一些东西。只需要让它继续为我工作。我不知道我做错了什么。看一看,让我知道什么可能是不正确的?如果你把它添加到原始帖子中,我可以查看它。检查我的答案,我已经修改了底部部分来解释如何使用这些。你的帖子末尾有一个零散的}
,这是应该匹配上面的内容还是仅仅是噪音?不,这一切都匹配。我的括号很好。它只是无法识别框架内,甚至外部框架内的点击。他说的是你的代码格式。有一个迷路的}那是为了下课。是的,刚刚看到。哈哈
package com.xxemu.main;
import java.awt.Menu;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
public class Techni extends JInternalFrame
{
private static final long serialVersionUID = -7905672790566329537L;
static int openFrameCount = 0;
private ImageIcon image;
private JLabel label;
private Menu menu;
public int frame = 1;
static final int xOffset = 75, yOffset = 90;
public Techni()
{
super("emu",
true, //resizable
true, //closable
true, //maximizable
true);//iconifiable
//setSize(783, 522);
setSize(400, 400);
setLocation(xOffset, yOffset);
}
public void setLayeredPane(JLayeredPane layered)
{
addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
System.out.println("asdfsd");
if (e.getX() < 0 && e.getY() > 0)
{
System.out.println("test");
}
}
});
}
}