标签: javafx

如何调整JavaFX ScrollPane内容的大小以适应当前大小

我有一个BorderPaneScrollPane为中心元素.它会自动调整大小以填充屏幕.里面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)

resize javafx scrollpane autolayout

49
推荐指数
2
解决办法
4万
查看次数

按代码关闭fxml窗口,javafx

我需要通过控制器中的代码关闭当前的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)

但它不起作用!

所有帮助将不胜感激.谢谢!

java user-interface javafx fxml

48
推荐指数
3
解决办法
14万
查看次数

如何删除JavaFX按钮的默认边框发光(选中时)?

我正在尝试删除选中JavaFX按钮时默认显示的边框发光(请参见下面的屏幕截图):

选择按钮时,蓝色边框是JavaFX的默认样式

我也希望使用CSS来实现这一点,而不是在主JavaFX脚本中以声明方式实现.但是,我无法弄清楚我需要使用什么CSS属性(呃,设置为0?)才能删除该边框.

javafx

47
推荐指数
6
解决办法
5万
查看次数

尝试使用GTKLookAndFeel冻结应用程序在JavaFX中设置样式的SwingNodes

我们有一个使用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.NimbusLookAndFeelcom.sun.java.swing.plaf.motif.MotifLookAndFeel.

我们可以做些什么来使用它GTKLookAndFeel来设计我们的Swing组件SwingNode

java gtk swing javafx look-and-feel

47
推荐指数
1
解决办法
881
查看次数

在JavaFX中禁用按钮

在Swing中,我们可以禁用这样的按钮:

JButton start = new JButton("Start");
start.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

无论如何使用JavaFX Button执行此操作?用户应该只能按一次按钮.

java user-interface javafx

46
推荐指数
2
解决办法
8万
查看次数

为空javafx表删除默认的"表中没有内容"文本

我想删除或更改空javafx表显示的默认文本,No content in table使其更有意义.

例如,在一个显示学生的表格中,当没有学生要展示时,我希望它在课程表中说"数据库中没有学生"或"学生没有课程".我不知道在javafx中是否可以通过Java代码,使用场景构建器或在IDE中编辑.fxml文件.到目前为止,我已经在场景构建器中查看了tableview的属性,但是我看不到此文本的相关属性

java javafx fxml scenebuilder javafx-8

46
推荐指数
2
解决办法
2万
查看次数

如何在onfocus和outfocus上对javaFX TextField执行任务?

我正在研究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)

java javafx javafx-2 javafx-8

45
推荐指数
3
解决办法
5万
查看次数

JavaFX:阶段关闭处理程序

我想在关闭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

java javafx handler javafx-8

45
推荐指数
2
解决办法
7万
查看次数

带有自定义CellFactory的ListView修剪不可见节点

我的布局问题

我有一点问题,ListView我不确定是不是因为我遗漏了一些知识,或者我的方法存在缺陷.不得不承认我还不清楚JavaFX在很多可能情况下如何处理布局.

ListView修剪我的布局尝试

上面的屏幕截图显示了我使用完全相同的代码获得两次的结果,除了在第二个屏幕截图中,我用于连贯布局的不可见形状对于调试是可见的.

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 layout listview javafx

45
推荐指数
1
解决办法
1089
查看次数

JavaFX是否具有像Swing这样的"原生外观"选项?

自从我完成任何Java工作已经有几年了,我最后的努力是使用Swing.我正在寻找一个可以与Rails Web服务交互的跨平台客户端应用程序.JavaFX是我正在考虑的选项之一,但我关注的是开箱即​​用的美学.JavaFX是否具有JavaFX控件(不是Swing)的本机外观选项?

我得到的印象是,如果我想在Java中构建一系列业务应用程序,我应该坚持使用Swing这是一种耻辱,因为我喜欢JavaFX的一些功能,如绑定,简洁的语法和简单的支持REST客户端编程.

javafx

43
推荐指数
3
解决办法
2万
查看次数