0
動的TextFieldを作成するために次のコードを試してみました。これをScrollPane内のVBoxに追加しました。しかし、私が直面している問題は、TextFieldがScrollPaneに表示されないより多く追加された場合です。JavafxでScrollPane setVvalue()が動作しません
行scrollPane.setVvalue(Double.MAX_VALUE);動かない。
ScrollPaneDemo.java
package scrollpanedemo;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
*
* @author vikassingh
*/
public class ScrollPaneDemo extends Application {
VBox vboxInner = new VBox();
ScrollPane scrollPane = new ScrollPane();
List<TextFieldClass> textfieldClass = new ArrayList<TextFieldClass>();
@Override
public void start(Stage primaryStage) {
VBox.setVgrow(vboxInner, Priority.ALWAYS);
vboxInner.setPrefHeight(200);
vboxInner.getChildren().clear();
textfieldClass.clear();
newRow();
scrollPane.setContent(vboxInner);
Scene scene = new Scene(scrollPane, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
private void newRow() {
// Add row
textfieldClass.add(new TextFieldClass(new TextField()));
TextField newTextFileld = null;
HBox productDHbox = null;
for (TextFieldClass ctObject : textfieldClass) {
newTextFileld = ctObject.getTextField();
}
vboxInner.getChildren().add(newTextFileld);
// Rate TextField Listner
newTextFileld.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode().equals(KeyCode.ENTER) || event.getCode().equals(KeyCode.TAB) || event.getCode().equals(KeyCode.RIGHT)) {
// Add new TextField
newRow();
//
//**** Ensure Visibility of last TextField (Not working)
scrollPane.setVvalue(Double.MAX_VALUE);
//***** Ensure Visibility of last TextField (Not working)
//
textfieldClass.get(textfieldClass.size() - 1).getTextField().requestFocus();
event.consume();
}
});
}
}
TextFieldClass.java
package scrollpanedemo;
import javafx.scene.control.TextField;
/**
*
* @author vikassingh
*/
class TextFieldClass {
private final TextField newTextFiled;
TextFieldClass(TextField newTextFiled) {
this.newTextFiled = newTextFiled;
}
// First textfield
public TextField getTextField() {
return newTextFiled;
}
}