Hinzufügen eines MouseListener oder MouseMotionListener, um mein JLabel in einem Jpanel in meinem Steine-wie-board
Ich bin wirklich nicht sicher, was zu tun ist. Ich hatte angefangen, indem Sie eine neue Klasse, die beide MouseMotionListener und MouseListener, und das nimmt in seinem Konstruktor das 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;
}
Dies ist der code für mein board. Derzeit die Stücke sind nicht in der Lage, sich zu bewegen. Ich hatte eine Zeile in jede if-Anweisung zum hinzufügen eines MouseMotionListener--picLabel.addMouseMotionListener(new motion(picLabel))--aber das hat nicht funktioniert.
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;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um dies zu beheben listener hinzufügen, um die Bewegung Klasse
JLabel
Lesen Sie bitte auch Java Programming Style Guidelines
MouseListener
undMouseMotionListener
definieren zwei unterschiedliche Ereignisse. Um für Ihre Hörer zu bekommen, beide Sätze müssen Sie sich für beide...mit so etwas wie dieses:Es ist auch erwähnenswert, dass in der code-snippet, das Sie geschrieben, Sie sind nicht das hinzufügen der listener überhaupt zu Ihrem
WhitePiece.png
Stücke.