我有一个BorderPane带ScrollPane为中心元素.它会自动调整大小以填充屏幕.里面ScrollPane是一个HBox没有内容但是是一个拖放目标.因此,我希望它填补其父母ScrollPane.
这样做的首选方法是什么?
到目前为止我所尝试的是重写ScrollPane.resize(...)调整大小的方法,HBox但它似乎相当复杂和非正统.
编辑:要为此添加一些有用的代码,这就是我可以解决问题的方法,但我相信必须有更好的方法来做到这一点:
@Override
public void resize(double width, double height) {
super.resize(width, height);
double scrollBarHeight = 2;
double scrollBarWidth = 2;
for (final Node node : lookupAll(".scroll-bar")) {
if (node instanceof ScrollBar) {
ScrollBar sb = (ScrollBar) node;
if (sb.getOrientation() == Orientation.HORIZONTAL) {
System.out.println("horizontal scrollbar visible = " + sb.isVisible());
System.out.println("width = " + sb.getWidth());
System.out.println("height = " + sb.getHeight());
if(sb.isVisible()){
scrollBarHeight = sb.getHeight();
} …Run Code Online (Sandbox Code Playgroud) 我需要通过控制器中的代码关闭当前的fxml窗口
我知道stage.close()或stage.hide()在fx中执行此操作
如何在fxml中实现这个?我试过了
private void on_btnClose_clicked(ActionEvent actionEvent) {
Parent root = FXMLLoader.load(getClass().getResource("currentWindow.fxml"));
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用!
所有帮助将不胜感激.谢谢!
我正在尝试删除选中JavaFX按钮时默认显示的边框发光(请参见下面的屏幕截图):

我也希望使用CSS来实现这一点,而不是在主JavaFX脚本中以声明方式实现.但是,我无法弄清楚我需要使用什么CSS属性(呃,设置为0?)才能删除该边框.
我们有一个使用Swing的Java应用程序,但我们正在将它迁移到JavaFX.因此,我们将旧的Swing代码包装成SwingNodes并逐步替换它们.
在迁移之前,Swing应用程序用作com.sun.java.swing.plaf.gtk.GTKLookAndFeel外观(Ubuntu上的默认设置).我们使用以下代码进行设置(如果可用):
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if (info.getClassName().equals("com.sun.java.swing.plaf.gtk.GTKLookAndFeel")) {
UIManager.setLookAndFeel(info.getClassName());
}
}
Run Code Online (Sandbox Code Playgroud)
这很好.然而,在切换到JavaFX后,调用UIManager.setLookAndFeel()冻结应用程序,没有任何反应.需要手动设置外观,因为我们仍然需要设置尚未根据文件迁移到JavaFX的Swing组件的样式GTKLookAndFeel.
进一步的信息:这只是不起作用com.sun.java.swing.plaf.gtk.GTKLookAndFeel,因为它在使用时起作用javax.swing.plaf.metal.MetalLookAndFeel,javax.swing.plaf.nimbus.NimbusLookAndFeel或com.sun.java.swing.plaf.motif.MotifLookAndFeel.
我们可以做些什么来使用它GTKLookAndFeel来设计我们的Swing组件SwingNode?
在Swing中,我们可以禁用这样的按钮:
JButton start = new JButton("Start");
start.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)
无论如何使用JavaFX Button执行此操作?用户应该只能按一次按钮.
我想删除或更改空javafx表显示的默认文本,No content in table使其更有意义.
例如,在一个显示学生的表格中,当没有学生要展示时,我希望它在课程表中说"数据库中没有学生"或"学生没有课程".我不知道在javafx中是否可以通过Java代码,使用场景构建器或在IDE中编辑.fxml文件.到目前为止,我已经在场景构建器中查看了tableview的属性,但是我看不到此文本的相关属性
我正在研究JavaFX项目.我需要在JavaFX上执行一些任务TextField.
例如,TextField我要打印的"焦点上"事件
System.out.println("Textfield on focus");
Run Code Online (Sandbox Code Playgroud)
它应该打印出"焦点"事件
System.out.println("Textfield out focus");
Run Code Online (Sandbox Code Playgroud) 我想在关闭JavaFX应用程序之前保存文件.
这就是我在以下方式设置处理程序的方式Main::start:
primaryStage.setOnCloseRequest(event -> {
System.out.println("Stage is closing");
// Save file
});
Run Code Online (Sandbox Code Playgroud)
Stage::close当按下按钮时控制器调用:
@FXML
public void exitApplication(ActionEvent event) {
((Stage)rootPane.getScene().getWindow()).close();
}
Run Code Online (Sandbox Code Playgroud)
如果我关闭窗口,单击窗口边框上的红色X(正常方式),然后我得到输出消息" Stage is closing",这是所需的行为.
但是,在调用Controller::exitApplication应用程序时关闭而不调用处理程序(没有输出).
如何让控制器使用我添加的处理程序primaryStage?
我有一点问题,ListView我不确定是不是因为我遗漏了一些知识,或者我的方法存在缺陷.不得不承认我还不清楚JavaFX在很多可能情况下如何处理布局.
上面的屏幕截图显示了我使用完全相同的代码获得两次的结果,除了在第二个屏幕截图中,我用于连贯布局的不可见形状对于调试是可见的.
CellFactory扩展所涉及的各种类Group,Parent到目前为止我尝试了其他一些没有太大成功.
而不是共享我的StarShape,StarRow和其他一些杂项类(我很乐意,如果需要)我写了一个样本复制的问题.该类扩展Application并覆盖该start(...)方法:
@Override
public void start(Stage primaryStage) throws Exception {
final StackPane root = new StackPane();
final Scene scene = new Scene(root, 400, 600);
final ListView<Boolean> listView = new ListView<>();
listView.setCellFactory(this::cellFactory);
for (int i = 0; i < 5 ; i++) {
listView.getItems().add(true);
listView.getItems().add(false);
}
root.getChildren().add(listView);
primaryStage.setScene(scene);
primaryStage.setTitle("ListView trims the invisible");
primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)
这里this::cellFactory是 …
自从我完成任何Java工作已经有几年了,我最后的努力是使用Swing.我正在寻找一个可以与Rails Web服务交互的跨平台客户端应用程序.JavaFX是我正在考虑的选项之一,但我关注的是开箱即用的美学.JavaFX是否具有JavaFX控件(不是Swing)的本机外观选项?
我得到的印象是,如果我想在Java中构建一系列业务应用程序,我应该坚持使用Swing这是一种耻辱,因为我喜欢JavaFX的一些功能,如绑定,简洁的语法和简单的支持REST客户端编程.
javafx ×10
java ×7
javafx-8 ×3
fxml ×2
autolayout ×1
gtk ×1
handler ×1
javafx-2 ×1
layout ×1
listview ×1
resize ×1
scenebuilder ×1
scrollpane ×1
swing ×1