标签: javafx-2

JavaFX ListView 和 ContextMenu - getSelectedItem() 返回 null

我想在 listView 的行上使用上下文菜单项。在listView的MOUSE_CLICKED事件的事件处理程序中,getSelectionModel().getSelectedItem()返回选定的项目,没关系。但是,当我处理 contextMenuItem 的 onAction 事件时,它返回 null。然而,以图形方式该项目被选择。有没有办法在第一次事件处理后“保留”选择?

这是代码的相关部分:

    ListView<Text> nameList = new ListView<>();
    final ContextMenu cCm = new ContextMenu();
    MenuItem cItem = new MenuItem("someText");
    cCm.getItems().add(cItem);
Run Code Online (Sandbox Code Playgroud)

...

nameList.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent e) {
            if (e.getButton() == MouseButton.SECONDARY) {
                    //its OK here:
                    System.out.println(nameList.getSelectionModel().getSelectedItem().getText());
                    cCm.show(nameList, e.getScreenX(), e.getScreenY());
            }
        }
    });

    cItem.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent e) {
            final Stage dialog = new Stage();
            dialog.initModality(Modality.WINDOW_MODAL);
            //nullPointerException on the following:
            Text t = new Text(nameList.getSelectionModel().getSelectedItem().getText());
            //showing dialog, etc.
Run Code Online (Sandbox Code Playgroud)

java event-handling javafx-2

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

将焦点设置在组合框的特定项目上而不选择它

我正在尝试制作一个组合框,它具有从其项目中搜索匹配项的功能。

这是我所做的代码示例,

ObservableList<String> ab = FXCollections.observableArrayList("z", "asxdf", "abasdf", "bcasdf", "b", "bc", "bcd", "c");

final ComboBox box = new ComboBox(ab);
box.setEditable(true);

box.setOnKeyReleased(new EventHandler<KeyEvent>() {
   @Override
   public void handle(KeyEvent t) {

      box.show();

      for (String item : items) {
         if (item.startsWith(box.getEditor().getText())) {

             box.getSelectionModel().select(item); //which selects the item.

             break;
         }
      }
   }
});
Run Code Online (Sandbox Code Playgroud)

现在的问题是box.getSelectionModel().select(item);选择在组合框中键入的特定项目,但我不想选择该项目,我只想将鼠标悬停在(聚焦)该项目上,就像鼠标悬停时一样。

谁能告诉我要替换的代码box.getSelectionModel().select(item);并帮助我解决这个问题。

java combobox javafx javafx-2 javafx-8

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

控制器中的 JavaFX 2 窗口事件处理

所以我尝试使用WINDOW_SHOWN如下代码处理来自控制器的事件:

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {

    initializeDatePickers();
    System.out.println("payer number in initialize: " + payerNumber);

    URL location = getClass().getResource("/createUser.fxml");
    FXMLLoader loader = new FXMLLoader();

    try {
        Parent root = (Parent) loader.load(location.openStream());
        root.getScene().getWindow().setOnShown(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent event) {
                System.out.println("ONSHOWN");
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }

}
Run Code Online (Sandbox Code Playgroud)

但我所得到的只是无休止的循环和程序崩溃。下面的代码也不起作用,它返回 NullPointerException:

@FXML private AnchorPane createUserDialog; //my root pane

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {

    createUserDialog.getScene().getWindow().addEventHandler(WindowEvent.WINDOW_SHOWN, 
      new EventHandler<WindowEvent>() {
        @Override
        public void handle(WindowEvent …
Run Code Online (Sandbox Code Playgroud)

java controller javafx-2

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

JavaFX 平滑动画

所以我有这个Timeline自定义动画。节点转换无关紧要。

final KeyValue kv1 = new KeyValue(angle, HALF_PI,  Interpolator.LINEAR);
final KeyValue kv2 = new KeyValue(angle, -HALF_PI, Interpolator.EASE_BOTH);

final KeyFrame kf1 = new KeyFrame(Duration.millis(0),   kv1);
final KeyFrame kf2 = new KeyFrame(Duration.millis(500), kv2);

Timeline animation = new Timeline(kf1, kf2);

animation.setRate(1);
Run Code Online (Sandbox Code Playgroud)

我的angle变量在此时间线中被修改并用于节点的转换。如您所见,在本例中rate1duration500

为了平滑转换,我猜测角度应该经历几个离散值,这些值由Interpolator.

另外,我不倾向于使用 aTask来实现这一点。仅当延迟远小于使用Timeline.

问题:

哪种调整可以使动画更加平滑?

A.rate+ 高duration
B.rate+ 低duration
C. ??? 其他

java javafx javafx-2 javafx-8

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

在 javafx 中使用更改侦听器时出现 StackOverFlow 错误

我有一个文本字段,它的输入数据应该是 16 位,在第 4、8、12 位之后应该输入空格,我写了这段代码,当我添加第二个内部条件 if 时,程序有堆栈溢出错误,我该怎么办?有什么问题?请帮忙。这是我的代码,我使用更改侦听器:

  cardNumberField.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> ov, String t, String t1){    
            if (t1.length() > 0) {
                String s = null;
                s = t1.substring(t1.length() - 1,t1.length());
                if (!s.matches("\\d") || t1.length() > 19) {
                    cardNumberField.setText(t);
                }
                if(t1.length() == 4 || t1.length() == 9 || t1.length() == 14){
                    cardNumberField.setText(t1 + " ");
                }
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2 scenebuilder

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

JavaFX2 是否有任何预制皮肤?

根据我的阅读,可以通过 CSS 编写 JavaFX2 皮肤。但我似乎找不到任何完整的示例,到处都有一些教程,但仅此而已。具体来说,我正在寻找 JavaFX2 的“深色”皮肤。您知道在哪里可以找到预制皮肤吗?

javafx-2

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

无法使用自定义单元工厂导入自定义组件

在 JavaFX 2.2 中,我在导入具有 FXML 中定义的自定义单元工厂的自定义组件时遇到问题。假设我的自定义组件如下

public class CustomComponent extends VBox{

public CustomComponent() {
    try {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("CustomComponent.fxml"));
        loader.setRoot(this);
        loader.setController(this);
        loader.load();
    } catch (IOException e ){
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

而对应的 FXML 是

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.VBox?>
<?import application.*?>
<?import application.TestFactory?>


<fx:root prefHeight="358.0" prefWidth="260.0" type="VBox" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
   <children>
      <TableView prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS">
        <columns>
          <TableColumn prefWidth="75.0" text="C1" >
            <cellFactory>
                <TestFactory />
            </cellFactory>
          </TableColumn>
          <TableColumn prefWidth="75.0" text="C2" >
          <cellFactory>
            <TestFactory …
Run Code Online (Sandbox Code Playgroud)

java-8 javafx-2 scenebuilder javafx-8

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

以百分比表示的 AnchorPane 约束

我正在做一个项目,我需要你的帮助。
我想知道这是否可以按百分比设置锚板约束,例如

AnchorPane.setLeftAnchor(content1, 35%);
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2 javafx-8

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

选中/取消选中 TableView 上的 JavaFx CheckBox 不会更新模型

我有一个带有复选框的第一列的 TableView。

我设法正确显示复选框并使其可编辑,但是当我单击复选框以选中或取消选中时,复选框会更改但它不会更新我的模型。

我是这样做的:

TableColumn<ContasReceber, Boolean> myCheckBoxColumn = (TableColumn<ContasReceber, Boolean>) tabelaContas.getColumns().get(0);
myCheckBoxColumn.setCellFactory(p -> new CheckBoxTableCell<>());
myCheckBoxColumn.setOnEditCommit(evt -> evt.getRowValue().setChecked(evt.getNewValue()));//It never executes the method setChecked when i click on the checkBox to change it's values.
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2 javafx-8

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

如何在不使用 Swing API 的情况下保存 JAVA FX 图表?

我有以下功能来保存 LineChart 图像:

@FXML
    public void saveAsPng() {
        String timeStamp = new SimpleDateFormat("HHmmss_yyyyMMdd").format(Calendar.getInstance().getTime());            
        chart.setAnimated(false);               
        System.out.println("Saving . . .");
        WritableImage image = chart.snapshot(new SnapshotParameters(), null);
        File file = new File("chart"+timeStamp+".png");

        try {
            ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file);
        } catch (IOException e) {
             Logger.getLogger(SampleController.class.getName()).log(Level.SEVERE, null, e);
             System.out.println("Error");
        }           
    }
Run Code Online (Sandbox Code Playgroud)

遗憾的是,用于 ARM 的 JDK 不支持Swing API。使用时出现错误:

ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file);
Run Code Online (Sandbox Code Playgroud)

我在WritableImage 图像变量中有渲染图像。还有其他方法可以保存图表吗?

swing arm javafx javafx-2

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