gpt4 book ai didi

java - 在单个 Jpanel 上创建鼠标监听器

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:18 25 4
gpt4 key购买 nike

这是我的第一篇文章,所以我希望它不会太令人尴尬。所以我正在尝试创建一个基于十六进制的策略游戏,虽然还没有完全实现,但无论如何。

为了实现基于十六进制的游戏,我想创建一个由六角形组成的字段,用户应该能够单击该字段并接收该像素的坐标。目前我可以生成一个六边形字段或一个鼠标监听器/鼠标适配器,但不能同时生成两者。最后执行的一个会替换屏幕上的另一个。

如果pane.add(New HexMap());用pane.add(new MouseListener());切换监听器工作但未打印该行

我已经环顾了一段时间,但我遇到的帖子要么涉及更改鼠标监听器可以执行的背景颜色,因为背景独立于鼠标传感器 http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html ?我遇到的其他示例对我来说太高级了,因为它们使用多个 Pane ,而我无法理解它们 http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html .

所以我正在寻找一种在单个 Pane 上添加鼠标监听器并显示十六进制的方法。这可能吗?例如,在 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 对象中。如:

panel.add(new MouseListener());
panel.add(new HexMap());

然后将其添加到框架的内容 Pane 中:

pane.add(panel);

如果您想知道如何以不同的方式安排界面,请在此处阅读有关布局管理器的信息:

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

编辑

尝试以下操作:

设置布局管理器以使用BorderLayout:

JPanel panel = new JPanel(new BorderLayout()); 

将组件添加到面板并设置它们的位置:

panel.add(new MouseListener(), BorderLayout.NORTH);
panel.add(new HexMap(), BorderLayout.CENTER);

将面板添加到框架内容 Pane :

pane.add(panel);

这可以工作,但是 MouseListener 面板的大小非常小...接下来您需要弄清楚...

关于java - 在单个 Jpanel 上创建鼠标监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18190975/

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