【发布时间】:2015-12-03 09:04:55
【问题描述】:
早安,
我可能对我的问题的标题有点含糊,但我希望这能解释清楚。该场景非常基本 - 我有一个 JFrame,其中有一个 JPlanes 数组。这个想法是,当我点击其中一个时,点击后应该变成黑色。代码如下:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.border.Border;
public class PixelArt {
JFrame frame;
Border blackline;
JPanel squares[][] = new JPanel[100][100];
int x;
int y;
public PixelArt() {
frame = new JFrame("Pixel Art");
frame.setSize(1000, 1000);
frame.setLayout(new GridLayout(100, 100));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
x = i;
y = j;
squares[i][j] = new JPanel();
squares[i][j].setBorder(BorderFactory.createDashedBorder(null));
squares[i][j].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
x = e.getX();
y = e.getY();
squares[x][y].setBackground(Color.black);
}
});
frame.add(squares[i][j]);
}
}
frame.setVisible(true);
}
public static void main(String[] args) {
new PixelArt();
}
}
实际的问题是这段代码没有按照我上面解释的那样做。单击时,它会在 JPlane 的黑色之一中着色,但在从网格上角开始的 9x9 区域内。我对此没有任何解释。问题似乎在以下两行:
x = e.getX();
y = e.getY();
我的一个猜测是我在坐标系中有某种偏移,但这并不能解释为什么无论我按哪个 JPanel,彩色的 JPanel 都只位于上部 9x9 区域。
有没有人知道如何解决我上面描述的问题?如果我的解释中有不清楚的地方,请询问。先感谢您。
这是工作代码的截图:
【问题讨论】:
-
Mouse#getX和Mouse#getY返回鼠标事件相对于产生事件的组件的像素位置。
标签: java swing jpanel coordinate