我要去学校用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);
}
答案 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。滑块是更合适的控件。
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";
}