小编Che*_*lin的帖子

JavaFX:如何在初始化期间从控制器获取阶段?

我想从我的控制器类处理阶段事件(即隐藏).所以我要做的就是通过添加一个监听器

((Stage)myPane.getScene().getWindow()).setOn*whatIwant*(...);
Run Code Online (Sandbox Code Playgroud)

但问题是初始化刚刚开始

Parent root = FXMLLoader.load(getClass().getResource("MyGui.fxml"));
Run Code Online (Sandbox Code Playgroud)

之前

Scene scene = new Scene(root);
stage.setScene(scene);
Run Code Online (Sandbox Code Playgroud)

因此.getScene()返回null.

我自己找到的唯一解决方法是向myPane.sceneProperty()添加一个监听器,当它变为非null时,我得到场景,添加到它的.windowProperty()我的!该死!我最终检索阶段的监听器处理.这一切都以设置所需的听众来举办舞台活动而告终.我认为听众太多了.这是解决我问题的唯一方法吗?

javafx initialization stage javafx-2 javafx-8

83
推荐指数
4
解决办法
12万
查看次数

JavaFX ProgressBar:如何更改条形颜色?

我试图用ProgressBar改变bar的颜色

pBar.setStyle("-fx-accent: green");
Run Code Online (Sandbox Code Playgroud)

但我遇到了一个问题:这似乎不适合我!(或者我只是不明白的东西)

这是代码:

public class JavaFXApplication36 extends Application {

@Override
public void start(Stage primaryStage) {
AnchorPane root = new AnchorPane();
ProgressBar pbRed = new ProgressBar(0.4);
ProgressBar pbGreen = new ProgressBar(0.6);
pbRed.setLayoutY(10);
pbGreen.setLayoutY(30);

pbRed.setStyle("-fx-accent: red;");       // line (1)
pbGreen.setStyle("-fx-accent: green;");   // line (2)

root.getChildren().addAll(pbRed, pbGreen);
Scene scene = new Scene(root, 150, 50);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)

我总是得到2个红色进度条!似乎第(1)行中的代码改变了ProgressBar类的样式,而不是实例.

另一个奇怪的时刻是删除第(1)行不会产生2个绿色进度条.所以我可以认为第(2)行是完全无用的!为什么?!这绝对是奇怪的.

有没有办法为单独的进度条设置单独的颜色?

colors javafx-2 progress-bar

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

JavaFX如何设置最大/最小窗口大小?

setMinSize()是否适用于容器,例如GridPane?我发现在我的程序中GridPane忽略了min.手动调整大小时的大小属性.这是FXML代码:

<GridPane fx:id="gp" prefHeight="134.0" prefWidth="238.0" xmlns:fx="http://javafx.com/fxml" fx:controller="javafxapplication12.SampleController">
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  </rowConstraints>
</GridPane>
Run Code Online (Sandbox Code Playgroud)

和控制器类

public class SampleController implements Initializable {

    @FXML
    private GridPane gp;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    gp.setMaxWidth(700);
    gp.setMinSize(200, 200);
    }   
Run Code Online (Sandbox Code Playgroud)

这有什么不对?应该有某种"窗口"最大/最小尺寸?

javafx-2 fxml

9
推荐指数
1
解决办法
5万
查看次数

无法在JavaFX中侦听KeyEvent

我希望我的JavaFX程序能够响应键盘事件.
我尝试将监听器添加到root Pane,最顶层Pane,但它不响应事件!
这是我的代码:

   AnchorPane root = new AnchorPane();
   root.setOnKeyPressed(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent t) {
            pressKey(t.getCharacter().charAt(0));
        }
    });
    root.setOnKeyReleased(new EventHandler<KeyEvent>() {

        @Override
        public void handle(KeyEvent t) {
            releaseKey(t.getCharacter().charAt(0));
        }
    });
    root.addEventHandler(EventType.ROOT, new EventHandler<Event>() {

        @Override
        public void handle(Event t) {
            if (t.getClass().equals(KeyEvent.class)) {
                System.out.println("AAARGH! " + ((KeyEvent)t).getCharacter());
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

为什么你不工作,关键事件?我在这里做错了吗?
可以肯定的是,鼠标事件可以使用相同的代码正常工作.

keyevent keyboard-events javafx-2

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

如何限制项目的可见性?

想象一下,我们有一个AnchorPane,它有孩子Pane,我们有Button,例如.
我希望这Button只能在这里展示Pane.
换句话说,Pane如果它不完全在内,它将被边缘切割Pane.Button即使它超出Pane矩形,现在也可以看到.

visibility pane javafx-2

7
推荐指数
3
解决办法
8823
查看次数

如何禁用文本字段上的默认上下文菜单

默认情况下,JavaFX TextField内置ContextMenu了"撤消","复制","剪切"等选项.该ComboBox也具有同样的ContextMenu,当它被设置为可编辑(的ComboBox其实是这是一个编辑器的一部分TextField).

我想ContextMenu用自定义替换它,但我遇到了禁用默认问题的问题.

我试图消耗ContextMenu和鼠标点击事件,但ComboBoxComboBox.getEditor()都有空ContextMenu.

我错过了什么吗?

default contextmenu textedit javafx-2

6
推荐指数
2
解决办法
6359
查看次数

如何正确检测JavaFX中哪些鼠标按钮已关闭

我已经设置了一个监听器,Pane以便它可以检测鼠标左右按钮是否向下.但是当我按住鼠标左键,然后按右键,之前的动作似乎失去了它的效果!

我的代码:

root.setOnMouseDragged(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent t) {
        if(t.getButton() == MouseButton.PRIMARY) f1();
        if(t.getButton() == MouseButton.SECONDARY) f2();
    }
});
Run Code Online (Sandbox Code Playgroud)

拿着LMB我已经f1()跑了,但是当我推RMB时,新事件似乎完全覆盖了前一个:只f2()运行.

我该如何分开这两个事件?

mouseevent javafx-2

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

JavaFX:如何设置正确的工具提示位置?

我有一个TextField我希望Tooltip在某些情况下展示的东西.

执行检查后,我运行以下代码:

textFieldUsername.setTooltip(new Tooltip("Enter username!"));
textFieldUsername.getTooltip().setAutoHide(true);
textFieldUsername.getTooltip().show(textFieldUsername, 1, 1);
Run Code Online (Sandbox Code Playgroud)

因此,当有人尝试使用空用户名登录时,他会收到Tooltip"用户名" 的提示TextField.

但是当涉及到动作时,Tooltip屏幕左上角会弹出.

我应该计算我的场景的坐标,然后将我的TextField坐标添加到它们,或者有一种方法可以设置这些1, 1参数来调用show()相对于TextField位置的调用?

position javafx tooltip javafx-2

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

JavaFX runlater规范和性能

我正在用JavaFX编写一个简单的平台游戏.由于我必须使用Platform.runLater()(用于添加/删除节点),我知道在具有大量对象的大阶段的情况下可能存在性能问题 - > runLater()每秒更多的调用.
性能最佳:在一次Platform.runLater()调用中将要在JavaFX线程中完成的操作分组,还是在一次迭代中多次调用它?它对性能和UI响应能力有多大影响?
例如,如果我在屏幕上有20个字符,则以2发子弹/秒的速度射出子弹.这将产生40个用于添加节点的调用,40个用于移除节点的调用(击中表面的子弹将消失)以及几个用于其他效果的调用.如何定义哪种解决方案更好:
1 runLater().每秒调用100次.
2.每帧(例如30 fps)分组操作并runLater()每秒调用30次.
3.选择其他解决方案.我正在考虑"节点池",它将保存舞台上的一些节点,但不可见.这将最小化runLater()呼叫量.

performance javafx-2

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

有没有JavaFX图像编辑器?

我想在我的JavaFX应用程序中放入一个简单的光栅图形编辑器.
似乎无法使用它,javafx.scene.image.Image因为图形对象是只读的.
有人可以指出我该怎么做或者有些类可以直接访问像素图?

upd:编辑器没有必要快速响应,因此建议a-la 创建隐藏java.awt.Canvas,处理ImageView上的所有事件以在画布上绘制,通过某种方式创建来自画布的输出流以创建新的javafx Image并放置它到ImageView.

image image-editing javafx-2

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