由于某种原因,某些颜色的背景颜色不会发生变化。对于"黄色"它没有变化。或" Pink"。我能想到的唯一原因是那些是AWT颜色,它使用的是代替JavaFX颜色,但我不确定为什么其他人不会这样做。
Here是问题和预期结果的图片
这是我改变ChoiceBox颜色的代码:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Tooltip;
import javafx.stage.StageStyle;
import javafx.scene.paint.Color;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import java.text.DateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.util.Duration;
import java.io.InputStream;
public class Clock extends Application {
public Text text;
@Override
public void start(Stage stage) {
DateFormat df = new SimpleDateFormat("EEE,MMM d yyyy - h:mm:ss a");
Date date = new Date();
String stringDate = df.format(date);
text = new Text(10, 60, stringDate);
Font font = null;
InputStream input = getClass().getResourceAsStream("/DIGITALDREAMFAT.ttf");
try {
font = Font.loadFont(input, 30);
} catch (Exception e) {
e.printStackTrace();
}
text.setFont(font);
text.setFill(Color.RED);
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0), new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
Date update = new Date();
String stringNewDate = df.format(update);
text.setText(stringNewDate);
}
}), new KeyFrame(Duration.seconds(1)));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
ChoiceBox colorChoice = new ChoiceBox(FXCollections.observableArrayList("Red", "Blue", "Green", "Yellow", "Pink", "Grey", "Black", "White"));
colorChoice.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent e) {
if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("Red")) {
colorChoice.setStyle("-fx-base: red");
text.setFill(Color.RED);
} else if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("Blue")) {
colorChoice.setStyle("-fx-base: blue");
text.setFill(Color.BLUE);
} else if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("Green")) {
colorChoice.setStyle("-fx-base: green");
text.setFill(Color.GREEN);
} else if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("Grey")) {
colorChoice.setStyle("-fx-base: grey");
text.setFill(Color.GREY);
} else if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("White")) {
colorChoice.setStyle("-fx-base: white");
text.setFill(Color.WHITE);
} else if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("Black")) {
colorChoice.setStyle("-fx-base: black");
text.setFill(Color.BLACK);
} else if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("Yellow")) {
colorChoice.setStyle("-fx-base: yellow");
text.setFill(Color.YELLOW);
} else if (colorChoice.getSelectionModel().getSelectedItem().toString().equals("Pink")) {
colorChoice.setStyle("-fx-base: pink");
text.setFill(Color.PINK);
} else {
colorChoice.setStyle("-fx-base: red");
text.setFill(Color.RED);
}
}
});
HBox hbox = new HBox(colorChoice);
Scene scene = new Scene(new Group(text, hbox));
hbox.setSpacing(10);
colorChoice.setTooltip(new Tooltip("Select Text Colour"));
colorChoice.getSelectionModel().selectFirst();
scene.setFill(Color.TRANSPARENT);
stage.setScene(scene);
stage.initStyle(StageStyle.TRANSPARENT);
stage.setX(0);
stage.setY(0);
stage.setWidth(710);
stage.setHeight(80);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
答案 0 :(得分:1)
下拉菜单的默认颜色是查找颜色-fx-control-inner-background
:这反过来默认为-fx-base
的非常轻的版本(比{{1}轻80% })。因此,如果您开始使用-fx-base
的浅色(例如黄色),它将有效地完全变亮至接近白色。如果您将-fx-base
替换为选项框,您将获得所需的效果。
请注意,您可以摆脱荒谬的-fx-control-inner-background
构造,因为选择框中的所选项目包含您需要的所有信息。
if-else
答案 1 :(得分:0)
在这里你正在听控件本身而不是项目,并且不会发生变化,它总是通过else条件,所以当你点击控件时它会默认选择颜色红色(没有选择项目)所以如果你想改变所选项目的ChoiceBox颜色,请使用:
cb.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
cb.setStyle("-fx-base:" + newValue.toLowerCase() + ";");
}
});
注意:这会根据所选项目而不是项目本身更改控件,如果有管理单元格属性的方法,我会感到惊讶!
祝你好运!