как применять эффекты и слайдер JAVAFX - PullRequest
0 голосов
/ 03 марта 2020

Хорошо, у меня есть следующий код, но, кажется, он не работает так, как я хочу, я хочу добавить ползунок, чтобы пользователь мог применить рамку вокруг текста между 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**
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...