我有一个传统的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) 我在JavaFX 8中有一个只读的TableView,我不希望'用户选择行.
他们仍然应该能够对列进行排序并滚动,而不是选择任何行.
我怎样才能做到这一点?
在对标题感到沮丧之前,我想清楚一点,我对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) 我读了这篇文章: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上应用它?
我正在寻找一个示例,使用新TextFormatter的Java8 u40 类将用户输入限制为仅数字和小数点.
http://download.java.net/jdk9/jfxdocs/javafx/scene/control/TextFormatter.Change.html
我试图在退出之前提示用户确认他们想要关闭程序.如果任务仍在执行中,我想确认仍然希望退出或让他们有机会在退出之前完成任务.我使用了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) 当任何表中没有记录时,它会显示一条消息"表中没有内容",这默认是JavaFx中TableView的功能.
所以我的问题是,JavaFx中的ListView是否可以实现相同的目标?就像,如果任何ListView中没有项目,那么它将显示与TableView相同的消息,而不是空白/空字段.
是否可以将整个样式表包装在字符串中并将其应用于某个节点?用例是为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) 我正在使用它
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) 当我在JavaFX中创建我的第一个3D游戏时 - 您可以使用鼠标从零件组装船只.这提出了一个问题,因为JAVAFX似乎没有用于将PerspectiveCamera屏幕2D坐标转换为场景3D空间的原生元素.
这是我正在努力实现的目标.鼠标移动的块应在假想的平面上移动,该平面始终相对于摄像机旋转90°:
我试图用三角函数解决问题而没有太大的成功.我没有附加代码片段,因为我正在寻找更通用的数学解决方案,但如果需要,我会提供它.
所有帮助将不胜感激!
期望的结果:


javafx-8 ×10
javafx ×7
java ×5
javafx-2 ×2
3d ×1
arabic ×1
css ×1
java-8 ×1
javafx-3d ×1
listview ×1
locale ×1
memory ×1
mouse ×1
multi-touch ×1
performance ×1
raycasting ×1
resources ×1
stylesheet ×1
swing ×1
tableview ×1