2016-03-10 183 views
0

我要去學校用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

不知道JavaFX的API,我不能幫助 - 但它可能是有益的,爲您發佈的代碼說明你已經嘗試過哪些步驟,以及爲什麼他們沒不適合你。 – dho

+0

是好還是你需要兩個類的所有代碼? – Maxwell

+0

不幸的是,我對這類東西還不太瞭解,但是附加信息會幫助其他人。 – dho

回答

0

這是可以做到的,但它不應該使用onScroll事件來完成。

添加ChangeListenervalue 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方法(或吸氣)做到這一點:

sb.setBlockIncrement(someValue); 

這樣做可以通過屬性的可讀性和不一樣的。

另外通常你會使用Slider這個(因爲在這種情況下句柄大小似乎沒有意義)。

0

我同意費邊,只是使用Slider這個任務,而不是ScrollBar。滑塊是一個更合適的控制。

normal thin fat

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

謝謝你們,我非常感謝滑塊的完美工作。確切地說我需要它。我是Stack Overflow的新手,有什麼我可以做給你一個榮譽。 – Maxwell

+0

[當某人回答我的問題時,我該怎麼辦?](http://stackoverflow.com/help/someone-answers) – jewelsea