我正在制作一个程序,允许用户在屏幕上绘制多个形状并选择所需的颜色。目前,我有9种预设颜色供用户选择。我打算使用JColorChooser
来允许用户选择不同的颜色。但是,我无法想出一种方法来存储可能选择的额外颜色,以便在绘制的形状重新绘制时它们将保持与绘制的颜色相同的颜色。按照额外颜色的顺序着色形状
我想出了一个办法重绘顺序的形状,他们被吸引,并与他们进行绘制,如下图所示的颜色:
private List<Shape> shapeList = new ArrayList<Shape>();
private List<Integer> opNumList = new ArrayList<Integer>();
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int index = 0;
Graphics2D g2 = (Graphics2D) g.create();
if (!opNumList.isEmpty()) {
for (Shape s : shapeList) {
switch (opNumList.get(index))
case 0: g2.setColor(Color.red); g2.draw(s); break;
case 1: g2.setColor(Color.red); g2.fill(s); break;
case 2: g2.setColor(Color.orange); g2.draw(s); break;
case 3: g2.setColor(Color.orange); g2.fill(s); break;
case 4: g2.setColor(Color.yellow); g2.draw(s); break;
case 5: g2.setColor(Color.yellow); g2.fill(s); break;
case 6: g2.setColor(Color.green); g2.draw(s); break;
case 7: g2.setColor(Color.green); g2.fill(s); break;
case 8: g2.setColor(Color.blue); g2.draw(s); break;
case 9: g2.setColor(Color.blue); g2.fill(s); break;
case 10: g2.setColor(purple); g2.draw(s); break;
case 11: g2.setColor(purple); g2.fill(s); break;
case 12: g2.setColor(brown); g2.draw(s); break;
case 13: g2.setColor(brown); g2.fill(s); break;
case 14: g2.setColor(Color.white); g2.draw(s); break;
case 15: g2.setColor(Color.white); g2.fill(s); break;
case 16: g2.setColor(Color.black); g2.draw(s); break;
case 17: g2.setColor(Color.black); g2.fill(s); break;
default: return;
}
index++;
}
}
}
@Override
public void mouseReleased(MouseEvent ev) {
if (color == Color.red) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(0);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(1);
}
if (color == Color.orange) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(2);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(3);
}
if (color == Color.yellow) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(4);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(5);
}
if (color == Color.green) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(6);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(7);
}
if (color == Color.blue) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(8);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(9);
}
if (color == purple) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(10);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(11);
}
if (color == brown) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(12);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(13);
}
if (color == Color.white) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(14);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(15);
}
if (color == Color.black) {
if (toolNum == LINE || (toolNum == RECTANGLE && !cbFillItem.isSelected()) || (toolNum == OVAL && !cbFillItem.isSelected()))
opNumList.add(16);
if ((toolNum == RECTANGLE || toolNum == OVAL) && cbFillItem.isSelected())
opNumList.add(17);
}
repaint();
}
那么会发生什么情况是,当用户绘制一个形状,它存储在Shape
对象的ArrayList
中。一个整数存储在一个单独的列表中,基于绘制了什么样的形状及其颜色。然后,当程序重新绘制所有形状时,它将遍历列表中的每个形状,并且它将为这些形状提供它们所绘制的颜色,并在必要时填充它们。现在
,正是我试图找出一种方法来这些颜色甚至Map
转移到自己的List
也许,以避免产生一吨Color
对象,并增加了已经很长的代码列表,以便如果用户决定使用其他颜色,该程序将知道什么颜色属于哪种形状。例如,如果用户决定用128,128,128的颜色绘制填充矩形,当程序重新绘制形状时,它会知道该矩形已填充,并被着色为特定的灰色阴影。但我还没有走得那么远;现在我正试图找到一种解决方案,可以用于目前我所拥有的九种颜色。
有没有人有任何想法如何做到这一点?