Heping_Ge2333 2022-05-17 20:30 采纳率: 100%
浏览 17
已结题

这个鼠标监听怎么全是bug啊?

哪位大师帮忙看看这个鼠标监听有什么问题啊?
希望能根据点击位置将数组对应位置的元素值设为1。

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class MainPanel extends JPanel {

    private int map[][] = new int[16][10];

    int width, height;

    int a, b, d, a1;

    public MainPanel(int width, int height) {
        setSize(width, height);
        this.width = width;
        this.height = height;
        a = (int) ((width * 0.8) / map.length);
        b = (int) ((height * 0.8) / map[0].length);
        d = a < b ? a : b;
        a = (getWidth() - map.length * d) / 2;
        a1 = d / 4;
        b = (getHeight() - map[0].length * d) / 2;
        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getButton() == MouseEvent.BUTTON1) {
                    int x = e.getX();
                    int y = e.getY();
                    if ((y >= b) && (y <= (b + map[0].length * d))) {
                        if ((x >= a) && (x <= (a + map.length * d))) {
                            int tmp = y - b;
                            tmp /= (2 * d);
                            if (tmp % 2 == 1) {
                                map[(x - a + a1) / (2 * d)][tmp] = 1;
                            } else {
                                map[(x - a - a1) / (2 * d)][tmp] = 1;
                            }
                        }
                    }
                }
            }
        });
    }

    @Override
    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[0].length; j++) {
                if (j % 2 == 1) {
                    if (map[i][j] == 0) g2.drawOval(a + i * d - a1, b + j * d, d, d);
                    else if (map[i][j] == 1) g2.fillOval(a + i * d - a1, b + j * d, d, d);
                } else {
                    if (map[i][j] == 0) g2.drawOval(a + i * d + a1, b + j * d, d, d);
                    else if (map[i][j] == 1) g2.fillOval(a + i * d + a1, b + j * d, d, d);
                }
            }
        }
    }

}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月25日
    • 创建了问题 5月17日

    悬赏问题

    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥15 stable diffusion
    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿