Java 更改图像宽度的滚动条

Java 更改图像宽度的滚动条,java,image,javafx,width,scrollbar,Java,Image,Javafx,Width,Scrollbar,我要去学校学习java编程。我收到一个程序,其中我必须使用滚动条来更改imageView的宽度。我的问题是,在JavaFX中使用scrollbar API是否可能 好的,这是我的密码 sb = new ScrollBar(); sb.setMax(100); sb.setMin(0); lastValue = 500; sb.setValue(lastValue); sb.setUnitIncrement(1); sb.blockIncr

我要去学校学习java编程。我收到一个程序,其中我必须使用滚动条来更改imageView的宽度。我的问题是,在JavaFX中使用scrollbar API是否可能

好的,这是我的密码

    sb = new ScrollBar();
    sb.setMax(100);
    sb.setMin(0);

    lastValue = 500;
    sb.setValue(lastValue);
    sb.setUnitIncrement(1);
    sb.blockIncrementProperty();
    sb.setOnScroll(e -> FacePart.getPart().scrollAction(lastValue));
这就是我的问题所在。在该代码所在的类和另一个类中的方法之间来回通信。 这是另一个类中的方法

其他方法

@Override
public void scrollAction(double j) {
    /*Global variable*/ lastScrollValue = j;
    iv.setFitWidth(300 + 2 * lastScrollValue);
}

这可以完成,但不应该使用
onScroll
事件完成

将以下内容添加到列表中:

或者简单地使用绑定:

iv.fitWidthProperty().bind(sb.valueProperty().multiply(2).add(300));
至少我想这是你想做的。我不知道你为什么要在那里用“全球”这个词

此外:

sb.blockIncrementProperty();
这实际上是一个NOP如果需要设置(或获取)值,则应使用提供的setter(或getter)进行设置:

通过属性执行此操作的可读性较低,并且执行相同的操作


通常你会使用a来完成这个任务(因为句柄大小在这种情况下似乎没有意义)。

我同意Fabian的观点,在这个任务中使用a,而不是a。滑块是更合适的控件


不知道JavaFXAPI,我也帮不上忙——但发布代码说明您已经尝试了哪些步骤,以及为什么它们不适合您,可能会对您有所帮助。这很好,还是您需要这两个类的所有代码?不幸的是,我对这类内容不太熟悉,但是额外的信息会帮助其他人。谢谢大家,我很感激滑块的帮助;这正是我所需要的。我是个新手,我能做些什么来给你一个荣誉吗。
sb.blockIncrementProperty();
sb.setBlockIncrement(someValue);
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.image.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class SmurfObesityMeter extends Application {
    private static final double DEFAULT_SIZE = 128;
    private static final double MIN_WIDTH = DEFAULT_SIZE / 2;
    private static final double MAX_WIDTH = DEFAULT_SIZE * 2;

    @Override
    public void start(final Stage stage) throws Exception {
        final Image image = new Image(IMAGE_LOC);
        final ImageView imageView = new ImageView(image);

        StackPane imagePane = new StackPane(imageView);
        imagePane.setMinSize(StackPane.USE_PREF_SIZE, StackPane.USE_PREF_SIZE);
        imagePane.setPrefSize(MAX_WIDTH, DEFAULT_SIZE);
        imagePane.setMaxSize(StackPane.USE_PREF_SIZE, StackPane.USE_PREF_SIZE);

        final Slider slider = new Slider(MIN_WIDTH, MAX_WIDTH, DEFAULT_SIZE);
        imageView.fitWidthProperty().bind(slider.valueProperty());

        final VBox layout = new VBox(10, imagePane, slider);
        layout.setPadding(new Insets(10));
        stage.setScene(new Scene(layout));
        stage.show();
    }

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

    private static final String IMAGE_LOC =
        "http://icons.iconarchive.com/icons/designbolts/smurfs-movie/128/smurfette-icon.png";
}