簡體   English   中英

在Java中更改RGB顏色

[英]change RGB color in Java

我已經用Java創建了一個程序(出於鍛煉目的),並且有一個星星,其中的顏色必須通過滾動鼠標從淺紅色變為深紅色。(使用MouseWheelListener),反之亦然。一切都可以與其他類型的星星配合使用,但是只有這個不起作用..而不是讓你們困惑,我要向您展示一些代碼!

這是紅星班

    public class StarRed extends Star {

    protected int r = 221;
    protected Color rood = new Color(r, 0, 0);

    public StarRed(int radius, int x, int y) {
        super(radius, x, y);


        this.color = rood;

        System.out.println(r);
    }

}

如您所見,我嘗試使用R變量來更改顏色。

在我的控制器中,我這樣做

    @Override
public void mouseWheelMoved(MouseWheelEvent e) {

    for(StarRed s: rs) {
        s.r += e.getWheelRotation();
    }
    repaint();
}

但是顏色沒有改變,有人可以告訴我我做錯了嗎?

Color是不可變的類,更改r的值不會更改protected Color rood的值

因此,您需要做的是在star類中添加新方法,其中rood的值(即要使用的顏色)將根據給定的參數進行更改。

假設您已正確實現mouseWheelMoved,則當您添加到值r時,問題就出在這里。

盡管十字架是:

protected Color rood = new Color(r, 0, 0);

在創建顏色之后更改r的值時,它不會更改Color rood紅色部分的值。

因此,您想創建一個函數,將其添加到色標中的紅色值,然后更改色本身。

當您將int類型的變量(或任何其他原始類型)傳遞給方法或構造函數時,您將傳遞變量的 (如果需要,則傳遞一個副本)。 您不會傳遞對其值的引用 因此,更改變量的值不會更改您之前使用此變量創建的顏色。

您需要更改顏色對象(但這是不可能的,因為顏色是不可變的),或將顏色對象本身替換為另一顏色對象。

每次移動輪子時,都需要實例化一種新顏色,如下所示:

for(StarRed s: rs) {
    s.r += e.getWheelRotation();
    s.rood = new Color(r, 0, 0);
    s.color = s.rood;
}

目前只更改領域r而不是顏色roodr用於構造。

暫無
暫無

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

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