滚动条更改图像的宽度

时间:2016-03-10 18:40:31

标签: java image javafx width scrollbar

我要去学校用Java编程。我收到了一个程序,我必须使用滚动条来更改imageView的宽度。我的问题是,甚至可以使用JavaFX中的滚动条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);
}

2 个答案:

答案 0 :(得分:0)

可以这样做,但不应使用onScroll事件来完成。

ChangeListener添加value property代替:

sb.valueProperty().addListener((observable, oldValue, newValue) -> {
    FacePart.getPart().scrollAction(newValue.doubleValue());
});

或者只是使用绑定:

iv.fitWidthProperty().bind(sb.valueProperty().multiply(2).add(300));

至少我猜这就是你想要做的。我不确定你为什么要在那里使用“全球”。

此外:

sb.blockIncrementProperty();

在这里实际上是一个NOP。 如果你需要设置(或获取)值,你应该使用提供的setter(或getter)来完成:

sb.setBlockIncrement(someValue);

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

通常你也会使用Slider(因为在这种情况下句柄大小似乎没有意义)。

答案 1 :(得分:0)

我同意Fabian,只需使用DR 1926执行此任务,而不是使用informal definition on cppreference。滑块是更合适的控件。

Slider ScrollBar normal

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";
}