鍍金池/ 教程/ Java/ JavaFX漸變顏色
安裝e(fx)clipse到Eclipse (JavaFX工具)
JavaFX屬性
JavaFX文本域(輸入框)
JavaFX切換按鈕
JavaFX曲線
JavaFX教程
JavaFX菜單(Menu)
JavaFX快速入門
JavaFX復(fù)選框
JavaFX ScrollPane布局
JavaFX綁定
JavaFX顏色選擇器(ColorPicker)
JavaFX進(jìn)度指示器
JavaFX按鈕
JavaFX TitledPane布局
JavaFX圓弧
JavaFX開發(fā)環(huán)境安裝配置
在Eclipse安裝JavaFX Scene Builder
JavaFX路徑
JavaFX VBox
JavaFX線條
JavaFX漸變顏色
JavaFX集合
JavaFX BorderPane布局
JavaFX DatePicker
JavaFX單選按鈕
JavaFX滾動(dòng)條
JavaFX矩形橢圓
JavaFX GridPane布局
JavaFX HBox
JavaFX進(jìn)度條
JavaFX多邊形折線
JavaFX超鏈接
JavaFX密碼字段
JavaFX Accordion布局
JavaFX概述和簡介
JavaFX選擇框
JavaFX文本
JavaFX顏色
JavaFX文件選擇器(FileChooser)
JavaFX標(biāo)簽
JavaFX FlowPane布局

JavaFX漸變顏色

JavaFX漸變顏色

可以使用徑向漸變使形狀看起來三維(立體)。

梯度繪制可以在兩種或更多種顏色之間內(nèi)插,這給出形狀的深度。JavaFX提供兩種類型的漸變:徑向漸變(RadialGradient)和線性漸變(LinearGradient)。

要在JavaFX中創(chuàng)建漸變顏色,需要設(shè)置五個(gè)屬性值。如下 -

  • 設(shè)置開始起點(diǎn)的第一個(gè)停止顏色。
  • 將終點(diǎn)設(shè)置為終止停止顏色。
  • 設(shè)置proportional屬性以指定是使用標(biāo)準(zhǔn)屏幕坐標(biāo)還是單位平方坐標(biāo)。
  • 將循環(huán)方法設(shè)置為使用三個(gè)枚舉:NO_CYCLE,REFLECTREPEAT。
  • 設(shè)置停止顏色數(shù)組。

通過將proportional屬性設(shè)置為false,可以基于標(biāo)準(zhǔn)屏幕(x,y)坐標(biāo)將漸變軸設(shè)置為起點(diǎn)和終點(diǎn)。

通過將proportional屬性設(shè)置為true,梯度軸線開始點(diǎn)和結(jié)束點(diǎn)將被表示為單位平方坐標(biāo)。 開始點(diǎn)和結(jié)束點(diǎn)的x,y坐標(biāo)必須在0.01.0之間(double)。

線性梯度(LinearGradient)

要?jiǎng)?chuàng)建線性漸變涂料,為開始點(diǎn)和結(jié)束點(diǎn)指定startX,startY,endXendY。起點(diǎn)和終點(diǎn)坐標(biāo)指定漸變模式開始和停止的位置。

下表列出了LinearGradient屬性值 -

屬性 數(shù)據(jù)類型及描述
startX Double - 設(shè)置梯度軸起點(diǎn)的X坐標(biāo)。
startY Double - 設(shè)置梯度軸起點(diǎn)的Y坐標(biāo)。
endX Double - 設(shè)置梯度軸終點(diǎn)的X坐標(biāo)。
endY Double - 設(shè)置梯度軸終點(diǎn)的Y坐標(biāo)
proportional Boolean - 設(shè)置坐標(biāo)是否與形狀成比例。設(shè)置為true時(shí)則使用單位正方形坐標(biāo),否則使用屏幕坐標(biāo)系。
cycleMethod CycleMethod - 設(shè)置應(yīng)用于漸變的循環(huán)方法。
stops List<Stop> - 設(shè)置漸變顏色指定的停止列表。

以下代碼顯示了如何使用線性漸變來繪制矩形。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;


public class Main extends Application {

    @Override
    public void start(Stage stage) {
        VBox box = new VBox();
        final Scene scene = new Scene(box, 300, 250);
        scene.setFill(null);
        Stop[] stops = new Stop[] { new Stop(0, Color.BLACK), new Stop(1, Color.RED) };
        LinearGradient lg1 = new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);

        Rectangle r1 = new Rectangle(0, 0, 100, 100);
        r1.setFill(lg1);

        box.getChildren().add(r1);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

上面的代碼生成以下結(jié)果。

徑向漸變

下表列出了RadialGradient屬性。

屬性 數(shù)據(jù)類型及描述
focusAngle Double - 設(shè)置從漸變中心到映射第一種顏色的焦點(diǎn)的角度(以度為單位)。
focusDistance Double - 設(shè)置從漸變中心到映射第一種顏色的焦點(diǎn)的距離。
centerX Double - 設(shè)置漸變圓的中心點(diǎn)的X坐標(biāo)。
centerY Double - 設(shè)置漸變圓的中心點(diǎn)的Y坐標(biāo)。
radius Double - 設(shè)置顏色漸變的圓的半徑。
proportional boolean - 設(shè)置坐標(biāo)和大小與形狀成比例。
cycleMethod CycleMethod - 設(shè)置應(yīng)用于漸變的Cycle方法。
Stops List<Stop> - 設(shè)置漸變顏色的停止列表

現(xiàn)在來看看下面的示例代碼 -

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
// => w W  w .y i IB  A I .C O   M
public class Main extends Application {
    static int dx = 1;
    static int dy = 1;

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(final Stage primaryStage) {
        primaryStage.setTitle("Animation");
        Group root = new Group();
        Scene scene = new Scene(root, 400, 300, Color.WHITE);

        primaryStage.setScene(scene);
        addBouncyBall(scene); 
        primaryStage.show();
    }
    private void addBouncyBall(final Scene scene) {
        final Circle ball = new Circle(100, 100, 20);

        RadialGradient gradient1 = new RadialGradient(0,
            .1,
            100,
            100,
            20,
            false,
            CycleMethod.NO_CYCLE,
            new Stop(0, Color.RED),
            new Stop(1, Color.BLACK));

        ball.setFill(gradient1);

        final Group root = (Group) scene.getRoot();
        root.getChildren().add(ball);

    }
}

上面的代碼生成以下結(jié)果。

半透明漸變

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {
// from W w w . y i I b a I. C o M
    @Override
    public void start(Stage stage) {
        VBox box = new VBox();
        final Scene scene = new Scene(box,300, 250);
        scene.setFill(null);
        // A rectangle filled with a linear gradient with a translucent color.
        Rectangle rectangle = new Rectangle();
        rectangle.setX(50);
        rectangle.setY(50);
        rectangle.setWidth(100);
        rectangle.setHeight(70);

        LinearGradient linearGrad = new LinearGradient(
                0,   // start X 
                0,   // start Y
                0,   // end X
                1, // end Y
                true, // proportional
                CycleMethod.NO_CYCLE, // cycle colors
                // stops
                new Stop(0.1f, Color.rgb(25, 200, 0, .4)),
                new Stop(1.0f, Color.rgb(0, 0, 0, .1)));
        rectangle.setFill(linearGrad);

        box.getChildren().add(rectangle);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

上面的代碼生成以下結(jié)果。

反射循環(huán)漸變

以下代碼使用在對(duì)角方向上的綠色和黑色創(chuàng)建具有漸變的重復(fù)圖案的矩形。開始點(diǎn)(X,Y)和結(jié)束點(diǎn)(XY)值設(shè)置在對(duì)角線位置,循環(huán)方法設(shè)置為反射CycleMethod.REFLECT。

CycleMethod.REFLECT使梯度圖案在停止顏色之間重復(fù)或循環(huán)。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage stage) {
    VBox box = new VBox();
    final Scene scene = new Scene(box, 300, 250);
    scene.setFill(null);
    // A rectangle filled with a linear gradient with a translucent color.
    Rectangle rectangle = new Rectangle();
    rectangle.setX(50);
    rectangle.setY(50);
    rectangle.setWidth(100);
    rectangle.setHeight(70);

    LinearGradient cycleGrad = new LinearGradient(50, // start X
        50, // start Y
        70, // end X
        70, // end Y
        false, // proportional
        CycleMethod.REFLECT, // cycleMethod
        new Stop(0f, Color.rgb(21, 25, 0, .784)), new Stop(1.0f, Color.rgb(0,
            210, 0, .784)));
    rectangle.setFill(cycleGrad);

    box.getChildren().add(rectangle);

    stage.setScene(scene);
    stage.show();
  }

  public static void main(String[] args) {
    launch(args);
  }
}

上面的代碼生成以下結(jié)果。


上一篇:JavaFX屬性下一篇:JavaFX按鈕