JavaFX实验——显示选中的颜色

编写程序一个程序,当点击面板中的颜色条目时,对应显示出颜色的文本说明,且文本颜色与所选颜色条目一致。

话说,我这个代码写得太繁琐了,肯定有更简洁的,但我还没找到…

其实这个跟前面的Listview那个代码差不多,就是麻烦多了,是我没找到简便办法。
JavaFX实验——显示选中的颜色_第1张图片

代码如下:

package sample;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.util.Callback;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        BorderPane root = new BorderPane();
        ListView<String> listView = new ListView<String>(FXCollections.observableArrayList("CHOCOLATE", "SALMON", "GOLD", "CORAL", "DARKORCHID", "DARKGOLDENROD", "LIGHTSALMON", "BLACK", "ROSYBROWN", "BLUE", "BLUEVIOLET", "BROWN"));
        Label label = new Label();
        label.setFont(new Font("Algerian 常规", 30));//设置字体和字号
        label.setTextFill(Color.WHITE);//设置文本颜色
        VBox vBox = new VBox(5);
        vBox.setPrefSize(300, 250);
        vBox.getChildren().add(listView);
        root.setTop(vBox);
        root.setBottom(label);

        listView.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
            @Override
            public ListCell<String> call(ListView<String> stringListView) {
                return new ColorCell();
            }
        });

        listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observableValue, String s, String t1) {
                if("CHOCOLATE".equals(t1)){
                    label.setText("Chocolate");
                    label.setTextFill(Color.CHOCOLATE);
                }
                else if("SALMON".equals(t1)){
                    label.setText("Salmon");
                    label.setTextFill(Color.SALMON);
                }
                else if("GOLD".equals(t1)){
                    label.setText("Gold");
                    label.setTextFill(Color.GOLD);
                }
                else if("CORAL".equals(t1)){
                    label.setText("Coral");
                    label.setTextFill(Color.CORAL);
                }
                else if("DARKORCHID".equals(t1)){
                    label.setText("Darkorchid");
                    label.setTextFill(Color.DARKORCHID);
                }
                else if("DARKGOLDENROD".equals(t1)){
                    label.setText("Darkgoldenrod");
                    label.setTextFill(Color.DARKGOLDENROD);
                }
                else if("LIGHTSALMON".equals(t1)){
                    label.setText("Lightsalmon");
                    label.setTextFill(Color.LIGHTSALMON);
                }
                else if("BLACK".equals(t1)){
                    label.setText("Black");
                    label.setTextFill(Color.BLACK);
                }
                else if("ROSYBROWN".equals(t1)){
                    label.setText("Rosybrown");
                    label.setTextFill(Color.ROSYBROWN);
                }
                else if("BLUE".equals(t1)){
                    label.setText("Blue");
                    label.setTextFill(Color.BLUE);
                }
                else if("BLUEVIOLET".equals(t1)){
                    label.setText("Blueviolet");
                    label.setTextFill(Color.BLUEVIOLET);
                }
                else if("BROWN".equals(t1)){
                    label.setText("Brown");
                    label.setTextFill(Color.BROWN);
                }
            }
        });
        primaryStage.setTitle("Color Block");
        primaryStage.setScene(new Scene(root, 300, 300));
        primaryStage.show();
    }

    class ColorCell extends ListCell<String> {
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            Rectangle rectangle = new Rectangle(100, 30);
            if (!empty) {
                rectangle.setFill(Color.web(item));
                setGraphic(rectangle);
            }
        }
    }
    public static void main(String[] args) {
        launch(args);
    }
}

运行结果:
JavaFX实验——显示选中的颜色_第2张图片

你可能感兴趣的:(JavaFX实验——显示选中的颜色)