GVKun编程网logo

复制并粘贴到嵌入Javafx应用程序的codemirror.js中(java复制到粘帖板)

16

最近很多小伙伴都在问复制并粘贴到嵌入Javafx应用程序的codemirror.js中和java复制到粘帖板这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展iOS8自定义键盘-复制

最近很多小伙伴都在问复制并粘贴到嵌入Javafx应用程序的codemirror.js中java复制到粘帖板这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展iOS8自定义键盘-复制并粘贴到UIPasteboard、JavaFx 2.x-Swing:不在FX应用程序线程上、JavaFX 小程序可以获取到百度框,并粘贴数据么、javafx-2 – 如何在controller-class中的javafx应用程序中交换屏幕?等相关知识,下面开始了哦!

本文目录一览:

复制并粘贴到嵌入Javafx应用程序的codemirror.js中(java复制到粘帖板)

复制并粘贴到嵌入Javafx应用程序的codemirror.js中(java复制到粘帖板)

我正在使用codemirror.js库在Java FX中创建简单的编辑器。我使用以下html /
js代码,使用javafx.scene.web.WebView组件在Javafx中嵌入了Codemirror编辑器:

<body><form>   <textarea id="code" name="code">   </textarea></form><script>   var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true});</script></body>

Codemirror编辑器本身支持撤消,重做,剪切,复制和粘贴。

我的应用程序中也有javafx主菜单,我想向其中添加复制或粘贴之类的操作。我想以某种方式与我的Codemirror编辑器“绑定”此菜单动作,因此,如果用户单击例如从主菜单粘贴,剪贴板中的内容将添加到Codemirror编辑器。

我为撤消和重做操作解决了这个问题:codemirror有两个js函数undo()和redo(),我可以通过javafx.scene.web.WebView.executeScript方法从Java级别调用它们。

我的问题是如何处理剪切,复制和粘贴操作?如何使用Codemirror编辑器从主菜单绑定此操作?我在codemirror.js中找不到可以处理此操作的任何js函数。

任何帮助表示赞赏,并在此先感谢。

答案1

小编典典

我找到了解决方案:Codmirror在API中没有剪切,复制和粘贴等功能,但是它允许获取和替换选定的文本,因此我可以自己编写这些操作。

public void cut() {    String selectedText = (String) webview.getEngine().executeScript(            "editor.getSelection();");    webview.getEngine().executeScript("editor.replaceSelection(\"\");");    final Clipboard clipboard = Clipboard.getSystemClipboard();    final ClipboardContent content = new ClipboardContent();    content.putString(selectedText);    clipboard.setContent(content);}public void copy() {    String selectedText = (String) webview.getEngine().executeScript(            "editor.getSelection();");    final Clipboard clipboard = Clipboard.getSystemClipboard();    final ClipboardContent content = new ClipboardContent();    content.putString(selectedText);    clipboard.setContent(content);}public void paste() {    final Clipboard clipboard = Clipboard.getSystemClipboard();    String content = (String) clipboard.getContent(DataFormat.PLAIN_TEXT);    webview.getEngine().executeScript(String.format("editor.replaceSelection(\"%s\");", content));}

iOS8自定义键盘-复制并粘贴到UIPasteboard

iOS8自定义键盘-复制并粘贴到UIPasteboard

是否可以使用键盘扩展名将文本/图像复制到UIPasteboard?类似于popkey.co对动画图像所做的操作。

我测试了以下代码,但似乎无法正常工作。

func copyImage() {    UIPasteboard.generalPasteboard().string = "copy test"}

它总是显示此错误消息:

UIPasteboard-无法启动粘贴纸板。确保已将其安装在UIKit.framework / Support中

您是否知道通过键盘扩展名使用复制粘贴的其他方法?

答案1

小编典典

如果我在“设置”->“常规”->“键盘”应用中为自定义键盘“完全访问”功能,就可以做到这一点。您需要在Info.plist文件中包含“
RequestsOpenAccess” = YES。并且您必须在“设置”应用中切换“完全访问权限”。

似乎苹果公司限制了对通用UIPasteboard的访问。

JavaFx 2.x-Swing:不在FX应用程序线程上

JavaFx 2.x-Swing:不在FX应用程序线程上

我试图通过使用JInternalFrame附加JFXPanel来使用JavaFx 2.x和Swing应用程序

我的代码如下

public class InternalFrameWithJavafx extends javax.swing.JFrame {
/**
 * Creates new form InternalFrameWithJavafx
 */
public InternalFrameWithJavafx() {
    initComponents();

    final JInternalFrame frame = new JInternalFrame();
    frame.setTitle("test InternalFrame");
    frame.setVisible(true);        
    frame.setResizable(true);
    frame.setIconifiable(true);
    frame.setMaximizable(true);
    frame.setIconifiable(true);
    frame.setClosable(true);
    frame.setSize(800,600);
    frame.setLocation(0,0);        
    frame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

    SwingUtilities.invokeLater(new Runnable() {

    @Override
    public void run() {
    final JFXPanel javafxPanel = new JFXPanel();

    BorderPane pane = new BorderPane();
    javafxPanel.setScene( new Scene(pane) {
        Text text = new Text("Hello World");

    });
    frame.getContentPane().add(javafxPanel,BorderLayout.CENTER);
    }
});        
    this.add(frame);    
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0,400,Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0,300,Short.MAX_VALUE)
    );

    pack();
}// </editor-fold>

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (UnsupportedLookAndFeelException e) {
        //handle exception
    } catch (ClassNotFoundException e) {
        //handle exception
    } catch (InstantiationException e) {
        //handle exception
    } catch (IllegalAccessException e) {
        //handle exception
    }
    java.awt.EventQueue.invokeLater(new Runnable() {

        public void run() {
            new InternalFrameWithJavafx().setVisible(true);
        }
    });
}                 
}

我有这个例外

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(Unknown Source)
at javafx.scene.Scene.<init>(Unknown Source)
at javafx.scene.Scene.<init>(Unknown Source)
at javafxapplication2.InternalFrameWithJavafx$1$1.<init>(InternalFrameWithJavafx.java:47)
at javafxapplication2.InternalFrameWithJavafx$1.run(InternalFrameWithJavafx.java:47)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

就我的目的而言,我必须使用JInternalFrame:如何解决此问题?

JavaFX 小程序可以获取到百度框,并粘贴数据么

JavaFX 小程序可以获取到百度框,并粘贴数据么

用 javaFX 写一个窗口小程序,可以通过某个快捷键复制数据到第三方的文本框里么。例如,按 F1 复制某个用户名到百度输入框

javafx-2 – 如何在controller-class中的javafx应用程序中交换屏幕?

javafx-2 – 如何在controller-class中的javafx应用程序中交换屏幕?

嘿,我搜索了一段时间,但我找不到解决以下问题的方法:

在javafx中有3个基本文件;控制器类,fxml文件和应用程序类.现在我想在控制器中做出一个按钮点击(其工作得很好)并更改该点击屏幕(通常使用stage.setScreen()),但我没有参考舞台(你可以在应用程序类中找到).

应用程序示例:

public class JavaFXApplication4 extends Application {

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));

    Scene scene = new Scene(root);

    stage.setScene(scene);
    stage.show();
}

/**
 * The main() method is ignored in correctly deployed JavaFX application.
 * main() serves only as fallback in case the application can not be
 * launched through deployment artifacts,e.g.,in IDEs with limited FX
 * support. NetBeans ignores main().
 *
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}
}

FXML-样品:

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

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefheight="200.0" prefWidth="320.0"  xmlns:fx="http://javafx.com/fxml" fx:controller="javafxapplication4.SampleController">
  <children>
  <Button id="button" fx:id="nextScreen" layoutX="126.0" layoutY="90.0" onAction="#handleButtonAction" text="Next Screen" />
  <Label fx:id="label" layoutX="126.0" layoutY="120.0" minHeight="16.0" minWidth="69.0" />
  </children>
</AnchorPane>

控制器 – 示例:

public class SampleController implements Initializable {

@FXML
private Label label;

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");
    label.setText("Hello World!");
    //Here I want to swap the screen!
}

@Override
public void initialize(URL url,ResourceBundle rb) {
    // Todo
}    
}

我会感谢任何一种帮助.

解决方法

@FXML
private void handleButtonAction(ActionEvent event) {
    System.out.println("You clicked me!");
    label.setText("Hello World!");
    //Here I want to swap the screen!

    Stage stageTheEventSourceNodeBelongs = (Stage) ((Node)event.getSource()).getScene().getwindow();
    // OR
    Stage stageTheLabelBelongs = (Stage) label.getScene().getwindow();
    // these two of them return the same stage
    // Swap screen
    stage.setScene(new Scene(new Pane()));
}

今天关于复制并粘贴到嵌入Javafx应用程序的codemirror.js中java复制到粘帖板的介绍到此结束,谢谢您的阅读,有关iOS8自定义键盘-复制并粘贴到UIPasteboard、JavaFx 2.x-Swing:不在FX应用程序线程上、JavaFX 小程序可以获取到百度框,并粘贴数据么、javafx-2 – 如何在controller-class中的javafx应用程序中交换屏幕?等更多相关知识的信息可以在本站进行查询。

本文标签: