Java 在单个Jpane上创建鼠标侦听器

Java 在单个Jpane上创建鼠标侦听器,java,swing,awt,mouselistener,Java,Swing,Awt,Mouselistener,这是我的第一篇文章,所以我希望它不会太卑鄙。所以我正在尝试创建一个基于十六进制的策略游戏,现在还不完全是这样,但无论如何 为了实现一个基于十六进制的游戏,我想创建一个由十六进制组成的字段,用户应该能够单击该字段,并接收该像素的坐标。目前,我可以生成一个hexes字段或一个mouselistener/mouseadapter,但不能同时生成这两个字段。最后执行的一个将替换屏幕上的另一个 如果是pane.add(newhexmap());与窗格切换。添加(新的MouseListener());侦听器

这是我的第一篇文章,所以我希望它不会太卑鄙。所以我正在尝试创建一个基于十六进制的策略游戏,现在还不完全是这样,但无论如何

为了实现一个基于十六进制的游戏,我想创建一个由十六进制组成的字段,用户应该能够单击该字段,并接收该像素的坐标。目前,我可以生成一个hexes字段或一个mouselistener/mouseadapter,但不能同时生成这两个字段。最后执行的一个将替换屏幕上的另一个

如果是pane.add(newhexmap());与窗格切换。添加(新的MouseListener());侦听器工作,但未打印行

我环顾四周已经有相当一段时间了,但是我遇到的帖子要么是关于改变背景颜色的,这是鼠标听者可以做到的,因为背景独立于鼠标传感器?我遇到的其他例子对我来说太高级了,因为它们使用多个窗格,我无法理解它们

所以我要寻找的是一种在单个窗格上添加鼠标侦听器的方法,显示十六进制数。这可能吗? 例如,在mouselistener之后添加hexMap不会覆盖mouselistener,而是充当一个加法

已创建一行作为十六进制的占位符

守则:

    import java.awt.*;                      
    import java.awt.event.*;
    import java.awt.font.*;
    import java.awt.geom.*;
    import java.util.*;
    import java.util.List;
    import javax.swing.*;

    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;



    public class GraphicsSetup extends JPanel{      

    public static final int FRAME_WIDTH = 600;
    public static final int FRAME_HEIGHT= 400;      

    private static JFrame frame;


    public static void main(String[] args){
        GraphicsSetup draw = new GraphicsSetup();           
    }

    public GraphicsSetup(){     

        HexMap hexMap = new HexMap();       
        JPanel panel = new JPanel();            
        frame = new JFrame("HexExample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);            
        Container pane = frame.getContentPane();            
        pane.setBackground(new Color(20, 100, 30));
        pane.add(new MouseListener());
        pane.add(new HexMap()); 
        frame.setVisible(true);         
    }    

    public class HexMap extends JComponent{

        public void paint(Graphics g){          
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(Color.blue);           
            g2d.drawLine(0,0, FRAME_WIDTH, FRAME_HEIGHT);                   
        }       
    }
    class MouseListener extends JComponent{

        public MouseListener(){

            addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent me) {
                    System.out.println("Mouse Event" + me);                     
                }
            });             
        }           
    }       
}   

您诚挚的

我不完全确定您的目标,但请尝试将您的组件添加到
面板
对象中。例如:

panel.add(new MouseListener());
panel.add(new HexMap());
然后将其添加到框架的内容窗格中:

pane.add(panel);
如果您想知道如何以不同的方式安排界面,请在此处阅读布局管理器:

编辑

请尝试以下操作:

将布局管理器设置为使用
边框布局

JPanel panel = new JPanel(new BorderLayout()); 
将零部件添加到配电盘并设置其位置:

panel.add(new MouseListener(), BorderLayout.NORTH);
panel.add(new HexMap(), BorderLayout.CENTER);
将面板添加到框架内容窗格:

pane.add(panel);

这将起作用,但
鼠标侦听器
面板的大小非常小……接下来您需要弄清楚这一点……

我不完全确定您想要什么,但请尝试将组件添加到
面板
对象中。例如:

panel.add(new MouseListener());
panel.add(new HexMap());
然后将其添加到框架的内容窗格中:

pane.add(panel);
如果您想知道如何以不同的方式安排界面,请在此处阅读布局管理器:

编辑

请尝试以下操作:

将布局管理器设置为使用
边框布局

JPanel panel = new JPanel(new BorderLayout()); 
将零部件添加到配电盘并设置其位置:

panel.add(new MouseListener(), BorderLayout.NORTH);
panel.add(new HexMap(), BorderLayout.CENTER);
将面板添加到框架内容窗格:

pane.add(panel);

这将起作用,但
MouseListener
面板的大小非常小……接下来您需要弄清楚……

这篇关于的文章可能会对您有所帮助,我希望:-),请记住,
paint()
不用于自定义图形,而
paintComponent()
用于手头的任务。请看一看,看第一个问题和相同的解决方案:-)+1为您的真诚:-)窗格的顺序。添加(新的MouseListener());添加(新的HexMap());很抱歉没有添加它,如果mouselistener是第一个,那么这行就不会打印,反之亦然,请解释,就像你在向孩子解释一样,一开始,窗口是什么样子,现在到底会发生什么。什么是十六进制,鼠标一次点击会在哪里,点击后会发生什么事情?我想,这个问题还不清楚。执行时,你会看到一个绿色的区域,上面有一条蓝线。这条线是六边形的简化模型,真正的六边形稍后将取代这条线。该程序还用于显示鼠标单击点的特定坐标,但该部分不起作用。如果在pane.add()之间切换顺序,您将无法再看到蓝线,但鼠标侦听器开始工作。只有最后一个激活的是可视的,我仍然怀疑,我完全理解:(尽管,如果你想做这样的事情,请看一下这个!!!这篇关于,可能会对你有帮助,我希望:-)记住,
paint()
不是用于自定义图形的,
paintComponent()
是用于手头的任务的。请看一看,看第一个问题和相同的解决方案:-)+1为您的真诚:-)窗格的顺序。添加(新的MouseListener());添加(新的HexMap());很抱歉没有添加它,如果mouselistener是第一个,那么这行就不会打印,反之亦然,请解释,就像你在向孩子解释一样,一开始,窗口是什么样子,现在到底会发生什么。什么是十六进制,鼠标一次点击会在哪里,点击后会发生什么事情?我想,这个问题还不清楚。执行时,你会看到一个绿色的区域,上面有一条蓝线。这条线是六边形的简化模型,真正的六边形稍后将取代这条线。该程序还用于显示鼠标单击点的特定坐标,但该部分不起作用。如果在pane.add()之间切换顺序,您将无法再看到蓝线,但鼠标侦听器开始工作。只有最后激活的才是可见的,但我仍然怀疑,我完全理解:(不过,如果你想做类似的事情,请看一下这个!!!我尝试将HexMap和MouseListener添加到面板,然后将面板添加到容器中。但是在执行框架时,框架变为灰色,MouseListener不起作用。这些部分应该在frame.setVisible之前(true)对吗?正确,看一看修改后的答案。谢谢。没错,它可以工作,但感觉GUI应该能够有一个工作的mouselistener,并在同一个地方绘制东西。如果你想让你的HexMap实例监听鼠标事件,那么你需要将鼠标侦听器添加到其中,而不是创建一个新的面板/组件。因此您的意思是创建一个HexMap实例,例如,HexMap HexMap=new HexMap();然后调用HexMap.addMouseListener(