gpt4 book ai didi

java - 将 MouseListener 或 MouseMotionListener 添加到我的 JLabel(位于我的西洋棋棋盘中的 Jpanel 内部)

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

我真的不知道该怎么办。我首先创建一个新类,它实现 MouseMotionListener 和 MouseListener,并在其构造函数中接收 JLabel:

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JLabel;

public class motion implements MouseMotionListener, MouseListener {

motion(JLabel im) {
label1 = im;
}

@Override
public void mousePressed(MouseEvent e) {
if (e.getSource() == label1) {
drag = true;
}
}

@Override
public void mouseReleased(MouseEvent e) {
drag = false;
}

@Override
public void mouseDragged(MouseEvent e) {
if (drag == true) {
mouseX = e.getX();
mouseY = e.getY();
label1.setBounds(mouseX, mouseY,
label1.getWidth(), label1.getHeight());
}
}

public void mouseMoved(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
private JLabel label1;
private int mouseX;
private int mouseY;
private boolean drag = false;

}

这是我的主板的代码。目前这些棋子无法移动。我在每个 if 语句中添加了一行来添加 MouseMotionListener - picLabel.addMouseMotionListener(newmotion(picLabel)) - 但这不起作用。

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Checkerboard {
public static void main (String args[]) throws IOException {
JFrame checkerBoard = new JFrame();
checkerBoard.setSize(700,700);
checkerBoard.setTitle("Lines of Action");
checkerBoard.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int row = 8;
int col = 8;
Container pane = checkerBoard.getContentPane();
pane.setLayout(new GridLayout(row,col));
Color checker;
for (int x = 1; x <= (row * col); x++) {
int altr = 0;
altr = (x-1) % col;
altr += (x-1) / col;

if (altr % 2 == 0) {
checker = Color.darkGray;
} else {
checker = Color.lightGray;
}

JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(400/row, 400/col));
panel.setBackground(checker);
if ((x < 8 && x > 1) || (x < 64 && x > 57)) {
BufferedImage myPicture =
ImageIO.read(new File("C:\\Users\\srjames90\\Downloads\\BlackPiece.png"));
JLabel picLabel = new JLabel(new ImageIcon( myPicture ));
picLabel.addMouseMotionListener(new motion(picLabel));
panel.add(picLabel);
} else if(check(x)) {
BufferedImage myPicture =
ImageIO.read(new File("C:\\Users\\srjames90\\Downloads\\WhitePiece.png"));
JLabel picLabel = new JLabel(new ImageIcon( myPicture ));
panel.add(picLabel);
}
pane.add(panel);
}
checkerBoard.setVisible(true);
}

static boolean check(int y) {
return y == 9 || y == 16 || y == 17 || y == 24 || y == 25
|| y == 32 || y == 33 || y == 40 || y == 41 || y == 48
|| y == 49 || y == 56;
}
}

最佳答案

要修复此问题,请将监听器添加到 Motion 类 JLabel

Motion(JLabel im) {
label1 = im;
label1.addMouseListener(this);
}

另请阅读Java Programming Style Guidelines

关于java - 将 MouseListener 或 MouseMotionListener 添加到我的 JLabel(位于我的西洋棋棋盘中的 Jpanel 内部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13669080/

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