[英]Changing colors of a list of shapes java
我被這個問題困住了:
當我在一個形狀(有一個矩形和圓形列表)內部單擊時,它會改變它的顏色。 但是當我在外面點擊時,它不會變回來。
public void mouseClicked(MouseEvent me) {
Color colorAux;
for (int i = 0; i < images.size(); i++) {
colorAux = images.get(i).getColor();
if (images.get(i).getShape() == "Rectangle") {
if ((images.get(i).getLocation().getX() < me.getX() && images.get(i).getLocation().getY() < me.getY() && images.get(i).getX() + images.get(i).getWidth() > me.getX() && images.get(i).getLocation().getY() + images.get(i).getHeight() > me.getY())) {
images.get(i).setColor(Color.BLUE);
repaint();
JOptionPane.showMessageDialog(null, colorAux); //Debug
} else if (!(images.get(i).getLocation().getX() < me.getX() && images.get(i).getLocation().getY() < me.getY() && images.get(i).getX() + images.get(i).getWidth() > me.getX() && images.get(i).getLocation().getY() + images.get(i).getHeight() > me.getY()) && (images.get(i).getColor() == Color.BLUE)) {
images.get(i).setColor(colorAux);
repaint();
}
}
}
我應該使用一系列顏色嗎? 不知道我該如何解決這個問題。 為了澄清我想要存檔的內容,這里有一個例子:
如果列表包含一個紫色矩形,我希望在它內部單擊時將其更改為藍色(有效)。 然后,當我在矩形外單擊時,我希望它變回紫色(這不起作用)。
我已經嘗試過 Leon 的建議,但沒有奏效。 我哪里做錯了?
更具體地說,當我只繪制 1 個形狀時,它會起作用! 但是例如,我畫了一個藍色矩形、一個紫色圓圈和一個紅色矩形,然后在一些形狀內部單擊,例如紅色矩形,每個形狀都會將其顏色更改為BLUE 。 當我再次單擊外部時,它會將每個形狀的顏色更改為默認顏色(黑色)。
public void mouseClicked(MouseEvent me) {
List<Color> colors = new ArrayList<Color>();
for (int j = 0; j < images.size(); j++) {
colors.add(images.get(j).getColor());
}
for (int i = 0; i < images.size(); i++) {
if ((images.get(i).getLocation().getX() < me.getX() && images.get(i).getLocation().getY() < me.getY() && images.get(i).getX() + images.get(i).getWidth() > me.getX() && images.get(i).getLocation().getY() + images.get(i).getHeight() > me.getY())) {
images.get(i).setColor(Color.BLUE);
repaint();
} else {
images.get(i).setColor(colors.get(i));
repaint();
}
}
}
您在正確的想法中使用顏色列表的想法(除非所有對象在開始時都具有相同的顏色)。 在此列表中,您存儲所有對象的初始顏色,您可以執行以下操作
// initialColors is the list holding the initial colors
for (int i=0; i<images.size(); i++) {
if (images.get(i).getShape() == "Rectangle") {
if (/*code to check if we are inside the rectangle which you already have*/) {
images.get(i).setColor(Color.BLUE);
repaint();
} else {
images.get(i).setColor(initialColors.get(i));
repaint();
}
} /* maybe add a case for getShape() == "Circle" */
}
您可以在創建和填充images
列表的同時創建和填充initialColors
列表(因為在那一刻,您知道每個形狀具有哪種顏色)。
關於您的方法不起作用的原因:假設我們在一個矩形內單擊並且其顏色更改為藍色。 當我們現在使用colorAux = images.get(i).getColor()
來獲取顏色時,我們得到藍色,因為我們改變了矩形的顏色。 當我們到達images.get(i).setColor(colorAux)
,我們將藍色矩形的顏色設置為藍色,這意味着什么也沒有發生。
此外,您不需要else if
並且可以使用else
作為第一個if
檢查單擊是否發生在矩形內。 這意味着當點擊不在矩形內時我們執行 else 分支,我們可以簡單地重置那里的顏色。
編輯:現在您添加到問題的更改不起作用,因為我們仍然有同樣的問題:我們在mouseClicked
事件中獲取顏色,而不是在形狀最初着色時獲取顏色。 這意味着我們用當前顏色(可能已更改為藍色)而不是初始顏色填充顏色列表。 您應該將添加的循環移動到最初為形狀着色的位置(可能是填充images
列表的位置)。
這是我認為正在發生的事情:
您需要將原始顏色保存在某處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.