मैं इस कोड चुड़ैल बनाता है एक क्लिक करने योग्य ग्रिड से पता चलता है कि माउस की स्थिति, हालांकि मैं नहीं कर रहा हूँ प्राप्त करने में सक्षम की स्थिति में ग्रिड में जहां माउस क्लिक किया, के लिए कोशिश कर रहा हो सकता है दोनों X और Y स्थिति. किसी भी विचार है? यह है कि ग्रिड की तरह दिखता है:
कोड:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.Border;
import javax.swing.border.MatteBorder;
public class TestGrid02 {
public TestGrid02() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private static final int ROWS = 20;
private static final int COLUMNS = 20;
private static GridBagConstraints gbc;
public TestPane() {
setLayout(new GridBagLayout());
gbc = new GridBagConstraints();
for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLUMNS; col++) {
gbc.gridx = col;
gbc.gridy = row;
CellPane cellPane = new CellPane();
Border border = null;
if (row < ROWS-1) {
if (col < COLUMNS-1) {
border = new MatteBorder(1, 1, 0, 0, Color.GRAY);
} else {
border = new MatteBorder(1, 1, 0, 1, Color.GRAY);
}
} else {
border = new MatteBorder(1, 1, 1, 0, Color.GRAY);
}
cellPane.setBorder(border);
add(cellPane, gbc);
}
}
}
}
public class CellPane extends JPanel {
private Color defaultBackground;
public CellPane() {
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e) {
defaultBackground = getBackground();
setBackground(Color.RED);
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(defaultBackground);
}
@Override
public void mouseClicked(MouseEvent e){
//Here is where it is supposed to be
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(30, 30);
}
}
}
में CellPane वर्ग, चुड़ैल जा करने का इरादा है कि एक को सुनता है, माउस यह माना जाता है होना करने के लिए समारोह की जरूरत है कि मैं, पर mouseClicked श्रोता, हालांकि मैं करने की कोशिश की है के साथ ई । getX() या ई । getLocationOnScreen() और इन मूल्यों को बदल रहे थे everytime मैं क्लिक में एक ही ग्रिड है ।