我想完成的事情:
我想用Java制作像素艺术制作者,我制作了一个网格,用于监听鼠标的点击。当我单击网格单元格时,该单元格应变成粉红色。
我正在使用private JPanel selectedPanel = null;
将选定的单元格分配给它。所以基本上是这样的:
if(mouse clicked on cell) { set cell to selectedPanel }
唯一的问题是,如果我选择另一个单元格,则不再选择上一个单元格(这会引起问题,我将在稍后进行解释)。
因此,例如,如果要制作它,以便您必须右键单击以删除颜色,则必须重新单击上一个单元以使其可移动(因为我这样做是为了您只能删除所选单元格上的颜色。)
我考虑过要制作一个选定的单元格阵列,然后如果您选择去除颜色,则要去除阵列中的单元格。我没有尝试过,因为:
- 我对Java来说太新了,无法理解所有这些
- 我不确定这是最有效的方法
- 我想使其成为避免将来出现常见问题的最佳方法
非常感谢任何帮助!!预先感谢!
这是我的代码:
private static final int ROW_COUNT = 10;
private static final int W = 60;
private static final int H = W;
private static final Dimension PREF_SIZE = new Dimension(W,H);
protected static final Color SELECTION_COLOR = Color.pink;
private JPanel selectedPanel = null;
private Color originalColor = null;
public Main() {
setLayout(new GridLayout(ROW_COUNT,ROW_COUNT,1,1));
setBackground(Color.black);
for (int i = 0; i < ROW_COUNT * ROW_COUNT; i++) {
JPanel panel = new JPanel();
String name = String.format("[%d,%d]",i / ROW_COUNT,i % ROW_COUNT);
panel.setName(name);
if (i == 0) {
originalColor = panel.getBackground();
}
panel.setPreferredSize(PREF_SIZE);
add(panel);
}
addmouseListener(new MouseAdapter() {
public void MapCalculations(MouseEvent e) {
// If left mouse button is clicked
if (SwingUtilities.isLeftMouseButton(e)) {
System.out.println("Left");
JPanel panel = (JPanel) getcomponentAt(e.getPoint());
if (panel == null || panel == Main.this) {
return;
}
selectedPanel = panel;
selectedPanel.setBackground(SELECTION_COLOR);
selectedPanel.add(new JLabel(selectedPanel.getName()));
selectedPanel.revalidate();
selectedPanel.repaint();
}
if (SwingUtilities.isRightMouseButton(e)) {
System.out.println("Right");
selectedPanel.setBackground(originalColor);
selectedPanel.removeAll();
selectedPanel.revalidate();
selectedPanel.repaint();
}
}
@Override
public void mousepressed(MouseEvent e) {
MapCalculations(e);
}
public void mouseDragged(MouseEvent e) {
MapCalculations(e);
}
});
}