我尝试了以下代码来创建动态TextField,并将其添加到ScrollPane中的VBox中。但我面临的问题是,如果添加的TextField数量超过了TextField在ScrollPane中不可见。
行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;
}
}
我只是将setVvalue()语句移动到if条件块之后。它没有完全解决您的问题,但当用户将输入一些东西时,最后一个文本字段将自动可见。
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();
textfieldClass.get(textfieldClass.size() - 1).getTextField().requestFocus();
event.consume();
}
scrollPane.setVvalue(Double.MAX_VALUE);
});
问题内容: 不仅如此,其他代码也有相同的问题。只是不能使用ImageView。 环境:macOS,IntelliJ 造成原因:java.lang.IllegalArgumentException:无效的URL:无效的URL或找不到资源 问题答案: 该图像构造函数接受一个url作为参数。如果您未在其中添加协议,则它将假定该项目来自类路径。显然,不会出现在您的类路径中。 要从文件而不是类路径中读取,请
早上好!我刚刚开始学习Java FX和Java FX FXML。我使用Scene Builder来构建GUI,Netbeans来编写剩下的Java FX程序。 我面临的问题是在FXML文件中。Netbeans编辑器在.fxml文件中为onAction事件显示以下代码的错误。 如果我使用Netbeans创建一个示例项目,它将使用AnchorPane,并且一切似乎都很好。但是,如果我删除AnchorP
我无法设置TextField的文本。没有错误,但Textfield仍然为空。程序的其余部分正在工作,方法被调用,system.out.println(...)打印正确的文本。所以问题是,不能设置textfield的文本。即使我只是写textfield.settext(“0”);textfield仍然为空。当我在public void initialize(...)下为textfield设置文本时也
我希望进度条显示60min状态,但当离开15000min时并没有真正显示状态。
问题内容: 我正在尝试使用TableView组件的onScroll事件侦听器: FXML: Java控制器: 但这不起作用!我做错了什么? 我需要捕获垂直滚动器以手动控制滚动位置并根据向下或向上滚动获取相关数据。 谢谢大家! 问题答案: 我认为可能发生的情况是TableView包含的自身正在消耗scroll事件并在内部对其进行处理,因此它永远不会到达您的应用程序处理程序。 最初,我认为您可能要使用