标签: javafx-8

为传统的swing应用程序添加触摸手势

我有一个传统的swing应用程序,我需要添加触摸手势,特别是捏缩放,触摸和拖动.

我尝试了JDK 8的SwingNode,我可以在那里运行swing应用程序,但是显示性能降低了50%以上,这是行不通的.MT4J中的SwingTextureRenderer具有相同的问题,甚至没有尝试将触摸事件重新发送为鼠标事件.

我想到了一个玻璃窗格方法,在顶部使用JavaFX层并捕获触摸事件并尝试将它们作为鼠标事件发送到下面的Swing应用程序.

有没有人有替代方法?目标平台是Windows 8.

一旦Stackoverflow打开它,Bounty即将到来.我很快就需要这个.

编辑:

这是我尝试使用SwingNode(鼠标redispatch不起作用).SwingNode的东西可能会分散对最佳解决方案的注意力,所以如果你有更好的想法来触摸它,请忽略它:

@Override
public void start(Stage stage) {
    final SwingNode swingNode = new SwingNode();
    createAndSetSwingContent(swingNode);

    StackPane pane = new StackPane();
    pane.getChildren().add(swingNode);

    stage.setScene(new Scene(pane, 640, 480));
    stage.show();
}

private void createAndSetSwingContent(final SwingNode swingNode) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            UILib.setPlatformLookAndFeel();

            // create GraphViewTouch
            String datafile = null;
            String label = "label";

            final JPanel frame = GraphView.demoFrameless(datafile, label);
            swingNode.setContent(frame);
            swingNode.setOnZoom(new EventHandler<ZoomEvent>() {
                @Override public void handle(ZoomEvent event) {
                    MouseWheelEvent me = new …
Run Code Online (Sandbox Code Playgroud)

java swing multi-touch javafx-8

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

禁用TableView中的行选择

我在JavaFX 8中有一个只读的TableView,我不希望'用户选择行.
他们仍然应该能够对列进行排序并滚动,而不是选择任何行.
我怎样才能做到这一点?

javafx tableview javafx-8

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

JavaFX吃掉了我的记忆?

在对标题感到沮丧之前,我想清楚一点,我对JavaFX UI更加新鲜.我使用Swing作为开发人员已经有9年了,目前我决定尝试使用JavaFX.网上的例子表明,与Swing相比,JavaFX真的可以创建漂亮的GUI.也许我试图以错误的方式创建和部署GUI,但有一件事是肯定的.JavaFX窗格加载比Swing慢,并消耗更多内存.使用JAVAFX重新设计了相同的GUI,它几乎需要200Mb,而Swing GUI只需要50Mb.

这里我举一个例子,说明如何使用FXML以编程方式创建GUI.

public class PanelCreator {

   private FXMLPane<LoginPaneController>           loginFXML;
   private FXMLPane<RegistrationPaneController>    registerFXML;
   private FXMLPane<EmailValidationPaneController> emailValidationFXML;

   public PanelCreator() {
      this.rootPane = rootPane;
      try {
        loginFXML           = new FXMLPane<LoginPaneController>("Login.fxml");
        registerFXML        = new FXMLPane<RegistrationPaneController>("Register.fxml");
        emailValidationFXML = new FXMLPane<EmailValidationPaneController>("EmailValidation.fxml");
      } catch (IOException e) {e.printStackTrace();} // catch
   } // Constructor Method

   public Pane getLoginPane() {
      return loginFXML.getPane();
   } // getLoginPane()

   public Pane getRegisterPane() {
      return registerFXML.getPane();
   } // getRegisterPane

   public Pane getEmailValidationPane() {
      return emailValidationFXML.getPane();
   } // getEmailValidationPane

   public LoginPaneController getLoginPaneController() {
      return …
Run Code Online (Sandbox Code Playgroud)

memory performance user-interface javafx javafx-8

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

设置阿拉伯语编号系统区域设置不显示阿拉伯数字

我读了这篇文章:JDK 8和JRE 8支持的语言环境,它声明:

编号系统可以由带有编号系统ID的语言标签指定 ????????????????????????????????????????????????????????????????? ? Numbering System ID ? Numbering System ? Digit Zero Value ? ????????????????????????????????????????????????????????????????? ? arab ? Arabic-Indic Digits ? \u0660 ? ?????????????????????????????????????????????????????????????????

现在,为了证明这一点,我写了以下代码:

import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;

public class Main
{
    public static void main(String[] args)
    {
        Locale locale = new Locale("ar", "sa", "arab");
        DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale);
        NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
        System.out.println(dfs.getZeroDigit());
        System.out.println(numberFormat.format(123));
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待输出是这样的:

0
123

但是,输出如下:

0
123

这样做的主要目的是使JavaFX GUI显示阿拉伯数字而不是英文数字,​​因为它使用默认语言环境(我可以设置它Locale.setDefault(...)).

所以我的问题是,如何使用区域设置中的编号系统来显示Java中的本地化数字?那么,是否可以在JavaFX上应用它?

java locale javafx arabic javafx-8

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

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

用户尝试在JavaFx中使用setOnCloseRequest关闭应用程序时的警报框

我试图在退出之前提示用户确认他们想要关闭程序.如果任务仍在执行中,我想确认仍然希望退出或让他们有机会在退出之前完成任务.我使用了setOnCloseRequest,但它没有用.我使用了event.consume,似乎只是禁用了[x]按钮.任何建议表示赞赏.我在这里发现了一个类似的问题对我不起作用 - > 没有函数的JavaFX stage.setOnCloseRequest?

Public class Sample extends Application {
      @Override
    public void start(Stage stage) throws Exception {

    stage.setOnCloseRequest(event -> {
        NewScanView checkScan = new NewScanView();
        boolean isScanning = checkScan.isScanning();

            Alert alert = new Alert(AlertType.CONFIRMATION);
            alert.setTitle("Close Confirmation");
            alert.setHeaderText("Cancel Creation");
            alert.setContentText("Are you sure you want to cancel creation?");
        if (isWorking == true){

            Optional<ButtonType> result = alert.showAndWait();
            if (result.get() == ButtonType.OK){
                stage.close();
            }

            if(result.get()==ButtonType.CANCEL){
                alert.close();
            }

        }


    });
    stage.setHeight(600);
    stage.setWidth(800);
    stage.setTitle("Title");
    stage.show();

}

public static void main(String[] args) {
    launch(args);
} …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-8

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

JavaFx:空ListView的默认消息

当任何表中没有记录时,它会显示一条消息"表中没有内容",这默认是JavaFx中TableView的功能.

所以我的问题是,JavaFx中的ListView是否可以实现相同的目标?就像,如果任何ListView中没有项目,那么它将显示与TableView相同的消息,而不是空白/空字段.

java listview javafx javafx-2 javafx-8

8
推荐指数
3
解决办法
7250
查看次数

在JavaFX 8中,我可以从String中提供样式表吗?

是否可以将整个样式表包装在字符串中并将其应用于某个节点?用例是为PseudoClass添加特定(非变化)行为.我知道我可以使用pane.getStylesheets().add(getClass().getResource("mycss.css").toExternalForm());,但我想知道是否有某种方法可以直接将其嵌入源代码中; 一些事情:

pane.getStylesheets().add(
    ".button:ok { -fx-background-color: green; }\n"+
    ".button:ko { -fx-background-color: red; }");
Run Code Online (Sandbox Code Playgroud)

css resources stylesheet embedded-resource javafx-8

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

Javafx使用计时器时不在fx应用程序线程上

我正在使用它

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;



public class Main extends Application {

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    Group root = new Group();
    Scene scene = new Scene(root, 600, 400);
    primaryStage.setScene(scene);
    Circle circle = new Circle(300,200,50, Color.BLACK);
    primaryStage.setTitle("Circle");
    primaryStage.setResizable(false);
    root.getChildren().add(circle);
    moveCircle(circle, scene);
    primaryStage.show();
}
public int random(int min, int max) {
    return new Random().nextInt((max - min) + …
Run Code Online (Sandbox Code Playgroud)

java javafx javafx-2 javafx-8

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

JavaFX在虚拟平面上使用鼠标移动3D对象

当我在JavaFX中创建我的第一个3D游戏时 - 您可以使用鼠标从零件组装船只.这提出了一个问题,因为JAVAFX似乎没有用于将PerspectiveCamera屏幕2D坐标转换为场景3D空间的原生元素.

这是我正在努力实现的目标.鼠标移动的块应在假想的平面上移动,该平面始终相对于摄像机旋转90°: 表示 我试图用三角函数解决问题而没有太大的成功.我没有附加代码片段,因为我正在寻找更通用的数学解决方案,但如果需要,我会提供它.

所有帮助将不胜感激!

期望的结果: 之前

后

3d mouse raycasting javafx-8 javafx-3d

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