簡體   English   中英

更改形狀列表的顏色java

[英]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列表的位置)。

這是我認為正在發生的事情:

  • 用戶在形狀內單擊鼠標 - 形狀的顏色設置為藍色。
  • 用戶在形狀外單擊鼠標,我們將顏色設置為 colorAux,這是由圖像顏色設置的,即藍色!

您需要將原始顏色保存在某處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM