标签: javafx-8

JavaFX 8的基本JUnit测试

我想为JavaFX 8应用程序创建基本的JUnit测试.我有这个简单的代码示例:

public class Main extends Application {
    public static void main(String[] args) {
        Application.launch(args);
    }
    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Tabs");
        Group root = new Group();
        Scene scene = new Scene(root, 400, 250, Color.WHITE);
        TabPane tabPane = new TabPane();
        BorderPane borderPane = new BorderPane();
        for (int i = 0; i < 5; i++) {
            Tab tab = new Tab();
            tab.setText("Tab" + i);
            HBox hbox = new HBox();
            hbox.getChildren().add(new Label("Tab" + i));
            hbox.setAlignment(Pos.CENTER);
            tab.setContent(hbox);
            tabPane.getTabs().add(tab);
        }
        // bind to …
Run Code Online (Sandbox Code Playgroud)

junit javafx junit4 javafx-2 javafx-8

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

没有使用Java 8 Eclipse设置Root错误

最近我为我的JavaFX应用程序安装了Java 8 build 124,我开始收到这些错误:

javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load.
/Users/jonathan/Projects/Dominion/target/classes/dominion/application/controller/main_overview_tab.fxml:13

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2613)
at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:104)
at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.java:1320)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at dominion.application.controller.MainOverviewTab.initView(MainOverviewTab.java:64)
at dominion.application.controller.MainOverviewTab.initializeController(MainOverviewTab.java:55)
at dominion.application.controller.GameSetupController.<init>(GameSetupController.java:37)
at dominion.application.controller.DashboardController.<init>(DashboardController.java:40)
at dominion.application.controller.MainController.<init>(MainController.java:37)
at dominion.application.Dominion.start(Dominion.java:18)
at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837)
at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

javafx.fxml.LoadException: Root hasn't been set. Use method setRoot() before load.
/Users/jonathan/Projects/Dominion/target/classes/dominion/application/controller/players_tab.fxml:13

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2613)
at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:104)
at javafx.fxml.FXMLLoader$RootElement.constructValue(FXMLLoader.java:1320)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723)
at …
Run Code Online (Sandbox Code Playgroud)

java macos javafx java-8 javafx-8

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

TableView:调整可见行数

我正在使用此表在表视图中显示数据:

import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Pagination;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;

public class MainApp extends Application
{
    IntegerProperty intP = new SimpleIntegerProperty(5);
    AnchorPane anchor = new AnchorPane();
    Scene scene;
    ObservableList<Integer> options
        = FXCollections.observableArrayList(
            5,
            10,
            15,
            20);
    final ComboBox comboBox = new ComboBox(options);
    final ObservableList<Person> data = FXCollections.observableArrayList(
        new Person("1", "Joe", "Pesci"), …
Run Code Online (Sandbox Code Playgroud)

javafx tableview javafx-2 javafx-8

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

ObservableList:如何可靠地检测setAll?

在某些情况下,有必要检测 - 在ListChangeListener中,无需控制列表本身 - "所有数据被换出",当我们需要清除某些状态时选择 - 在全新数据上,旧状态毫无意义.

可以通过以下方式获得完整的新数据

  • list.setAll(...)
  • list.set(otherObservableList)如果list是ListProperty

考虑可以在setAll上触发哪种类型的更改(c是更改,items是观察到的列表,"subChangeCount"用于计算子更改的伪代码):

// initially empty
assertEquals(0, items.size());
items.setAll(1, 2, 4);
assertEquals(1, c.subChangeCount());
assertTrue(c.wasAdded() && !c.wasReplaced());
assertEquals(0, c.getFrom());
assertEquals(c.getList().size(), c.getAddedSize()); 

// initially not empty
assertTrue(items.size() > 0);
items.setAll(1, 2, 4);
assertEquals(1, c.subChangeCount());
assertTrue(c.wasReplaced());
assertEquals(0, c.getFrom());
assertEquals(c.getList().size(), c.getAddedSize()); 
Run Code Online (Sandbox Code Playgroud)

这似乎允许实用程序检查,如:

boolean wasSetOrClearedAll(Change c) {
   if (c.getList().isEmpty()) return true;
   c.next();
   if (c.getAddedSize() == c.getList().size()) return true; 
   return false; 
}  
Run Code Online (Sandbox Code Playgroud)

相比之下,内部fx代码,在收听ComboBox的项目时:

while (c.next()) {
   comboBox.wasSetAllCalled = comboBox.previousItemCount == c.getRemovedSize();
   ... 
}
comboBox.previousItemCount = getItemCount();
Run Code Online (Sandbox Code Playgroud)

存储旧的itemCount并将其与当前的removedSize进行比较(我感到很不舒服,旧状态经常因我的口味而变得陈旧),但是我很有可能在我的方法中遗漏了一些东西.

问题是: …

java javafx observablelist javafx-8

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

如何设置菜单按钮和菜单项的样式

我试图在菜单按钮中更改样式.我可以更改菜单按钮样式,但不能更改其菜单项.无论我尝试菜单按钮内的菜单项保持不变.

.menu-button {
 -fx-background-color:black;
}

.menu-button .label {
 -fx-background-color:black; }
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样

现在我怎么能改变遗漏的颜色?

css javafx menuitem javafx-2 javafx-8

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

如何沿贝塞尔曲线写文字?

我希望在javafx 2.2中或至少在javafx 8中执行类似的操作.我浏览了没有结果的Text javadoccss引用.

在此输入图像描述

可以通过在WebView中显示和svg来实现此效果.但我的应用程序必须显示大量具有此效果的文本.WebView是一个太重的组件,用于绘制具有此效果的文本.

我在oracle技术网络上问了同样的问题.

java javafx-2 javafx-8

17
推荐指数
2
解决办法
4818
查看次数

如何进行TextArea拉伸以填充内容,在过程中扩展父级?

所以我有一个TextArea,当用户将段落粘贴到其中,或者只是在其中写入时,我希望它垂直展开以显示所有可用的文本.即不要在文本字段本身使用滚动条...就像许多网页上发生的情况一样.包括我自己在内的许多用户不喜欢被迫在一个小窗口中进行编辑.究竟Facebook状态更新框如何工作.

我试过了

myTextArea.autoSize()
Run Code Online (Sandbox Code Playgroud)

裹着一个

myTextArea.textProperty().addListener(new ChangeListener()....);

但这不起作用.我认为它很高兴自动调整到目前的大小.

左,右和顶部锚点设置为它的父级AnchorPane.我尝试了底部连接而没有连接.理想情况下,我希望随着textarea的增长而增长锚定窗格.

我不介意阅读TextProperty并计算我自己设置的触发器大小......但如果已经有最佳实践,这似乎是一种hacky方法.javafx的属性和子对象的数量是令人畏惧的,这似乎是一个在这里提出问题的好点,而不是试图弄清楚字体/段落占用了多少像素.

更新:

所以我想也许我是在思考它,而我所要做的就是关掉滚动条,剩下的就会发生.唉,寻找"滚动","垂直","vbar"的可用字段和方法,我找不到任何可以使用的东西.ScrollTopProperty看起来像是其他东西.

javafx-2 javafx-8

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

JavaFX 8 - 定位HBox的文本垂直中心

我很难将文本放在HBox中.我能够设置文本的水平对齐,但我无法设置文本的垂直对齐.我试图在Hbox的垂直中心设置文本,但它出现在顶部.

任何帮助将非常感激.

// Create The Updates Progress Bar At The Bottom Of The Window
HBox checkUpdatesBar = new HBox();
checkUpdatesBar.setId("checkUpdatesBar");
checkUpdatesBar.setPrefSize(CHECK_PANE_WIDTH, CHECK_PANE_HEIGHT);
checkUpdatesBar.setMinSize(CHECK_PANE_WIDTH, CHECK_PANE_HEIGHT);
checkUpdatesBar.setMaxSize(CHECK_PANE_WIDTH, CHECK_PANE_HEIGHT);

// Create The 'Check For Updates...' Text
Text checkForUpdates = new Text();
checkForUpdates.setFont(Font.font("Arial Black", FontWeight.BLACK, 15));
checkForUpdates.setWrappingWidth(CHECK_PANE_WIDTH / 2.8);
checkForUpdates.setFill(Color.WHITE);
checkForUpdates.setTextAlignment(TextAlignment.CENTER);
checkForUpdates.setText("Checking For Updates ...".toUpperCase());

checkUpdatesBar.getChildren().add(checkForUpdates);
Run Code Online (Sandbox Code Playgroud)

我的代码生成以下内容:http://puu.sh/ccEkp/41a26038a4.png

我喜欢我的水平定位.我知道它不在中间,因为我将它设置为那样.但是,我只关心垂直定位.

我分别尝试了以下内容:

checkForUpdates.setLayoutY(20);
checkForUpdates.setY(20);
Run Code Online (Sandbox Code Playgroud)

我选择数字20是因为我想将文本从HBox顶部向下移动20个像素.我在Photoshop中计算了这个值.虽然如果有更好的方法将文本设置为HBox的垂直中心,请赐教.

再次感谢您的帮助!

java javafx javafx-8

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

如何设置Dialog控件Java FX/Java 8的图标

我可能会遗漏一些非常明显的东西,但我无法找到如何为Dialog组件设置Icon(更准确的是ProgressDialog).我知道如何为舞台做这件事,__CODE__但我没有为Dialog家族找到任何东西.不知何故,设置舞台图标不会影响对话框图标.

谢谢

java icons javafx javafx-8

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

JavaFX 8 WebEngine:如何在java中将console.log()从javascript导入System.out?

我在JavaFX WebEngine中使用JavaFX和javascript引擎来开发应用程序.我想从javascript获取反馈以进行调试.WebEngine中的控制台输出会发生什么?有什么办法可以访问它,或者在java中重定向到System.out吗?

webview javafx-8 javafx-webengine

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