Хорошо, у меня есть следующий код, но, кажется, он не работает так, как я хочу, я хочу добавить ползунок, чтобы пользователь мог применить рамку вокруг текста между 1-4 пикселями, а также добавить различные цвета рамки. Кроме того, я хочу добавить флажок, который применяет эффект падающей тени, эффект внутренней тени и флажок без эффекта. То, что я сделал до сих пор, ниже, не работает должным образом, например, эффекты или когда ползунок границы перемещается применить границу, и цвета для границы, кажется, не меняются последовательно
VBox root2 = new VBox();
root2.setStyle( "-fx-font-size: 20; -fx-background-color: rgb(90%,90%,100%);" );
// custom code below --------------------------------------------
GridPane designArea = new GridPane();
designArea.setHgap(8);
designArea.setVgap(8);
designArea.setPadding( new Insets(8) );
// --------------------------------------------------------------
Label customLabel = new Label("Text:");
TextField customText = new TextField("Sample Text");
// --------------------------------------------------------------
Label fontNameLabel = new Label("Font Name:");
ComboBox<String> fontNameChooser = new ComboBox<String>();
List<String> fontNameList = Font.getFontNames();
for (String fontName : fontNameList)
{
fontNameChooser.getItems().addAll(fontName);
}
fontNameChooser.setValue("Arial");
// --------------------------------------------------------------
Label fontSizeLabel = new Label("Font Size:");
Slider fontSizeSlider = new Slider();
fontSizeSlider.setMin(12);
fontSizeSlider.setMax(96);
fontSizeSlider.setValue(24);
fontSizeSlider.setShowTickLabels(true);
fontSizeSlider.setShowTickMarks(true);
fontSizeSlider.setMajorTickUnit(12);
// --------------------------------------------------------------
Label fontColorLabel = new Label("Font Color:");
ColorPicker fontColorPicker = new ColorPicker();
fontColorPicker.setValue(Color.BLACK);
// --------------------------------------------------------------
Label borderSizeLabel = new Label("Border Size:");
Slider borderSizeSlider = new Slider();
borderSizeSlider.setMin(1);
borderSizeSlider.setMax(4);
borderSizeSlider.setValue(1);
borderSizeSlider.setShowTickLabels(true);
borderSizeSlider.setShowTickMarks(true);
borderSizeSlider.setMajorTickUnit(1);
// --------------------------------------------------------------
CheckBox borderCheck = new CheckBox("Show Border");
CheckBox dropShadow = new CheckBox("Drop Shadow effect");
CheckBox innerShadow = new CheckBox("Inner Shadow Effect");
CheckBox none = new CheckBox("No effect");
// --------------------------------------------------------------
Label borderColorLabel = new Label("Border Color:");
ColorPicker borderColorPicker = new ColorPicker();
borderColorPicker.setValue(Color.BLACK);
designArea.addRow( 0, customLabel, customText );
designArea.addRow( 1, fontNameLabel, fontNameChooser );
designArea.addRow( 2, fontSizeLabel, fontSizeSlider );
designArea.addRow( 3, fontColorLabel, fontColorPicker );
designArea.addRow( 4, borderSizeLabel, borderSizeSlider );
designArea.addRow(5, borderCheck);
designArea.addRow(6, borderColorLabel, borderColorPicker);
designArea.addRow(7, dropShadow, innerShadow, none);
//designArea.addRow(8, borderColorLabel, borderColorPicker);
//designArea.addRow(9, borderColorLabel, borderColorPicker);
// region where text is drawn
int canvasWidth = 800;
int canvasHeight = 200;
Canvas canvas = new Canvas(canvasWidth, canvasHeight);
GraphicsContext context = canvas.getGraphicsContext2D();
root2.getChildren().addAll( designArea, canvas );
// event and listener to activate on changes.
// most generic functional interface: no inputs, no output, contains method run()
Runnable updateFunction =
() ->
{
context.setTextBaseline(VPos.TOP);
context.setFill(Color.WHITE);
context.fillRect(0,0, canvasWidth,canvasHeight);
context.setFont( new Font( fontNameChooser.getValue(), fontSizeSlider.getValue() ) );
context.setFill( fontColorPicker.getValue() );
context.fillText( customText.getText(), 4,4 );
context.setLineWidth(1);
if ( borderCheck.isSelected() )
{
context.setStroke(borderColorPicker.getValue());
context.strokeText( customText.getText(), 4,4 );
}
if ( dropShadow.isSelected() )
{
DropShadow shadow = new DropShadow(6, 3, 3, Color.BLACK);
context.setEffect(shadow);
context.applyEffect(shadow);
}
if ( innerShadow.isSelected() )
{
InnerShadow e = new InnerShadow(6, 3, 3, Color.BLACK);
customText.setEffect(e);
}
};
EventHandler<ActionEvent> renderHandler =
(ActionEvent event) ->
{
updateFunction.run();
};
ChangeListener<Object> renderListener =
(ObservableValue<? extends Object> ov, Object oldValue, Object newValue) ->
{
updateFunction.run();
};
customText.textProperty().addListener( renderListener );
fontNameChooser.setOnAction( renderHandler );
fontSizeSlider.valueProperty().addListener( renderListener );
fontColorPicker.setOnAction( renderHandler );
borderSizeSlider.valueProperty().addListener(renderListener);
borderCheck.selectedProperty().addListener( renderListener );
dropShadow.selectedProperty().addListener( renderListener );
innerShadow.selectedProperty().addListener( renderListener );**strong text**