当前位置: 首页 > 知识库问答 >
问题:

JavaFX2设置表视图中的插入符号位置,在请求焦点后编辑TextField

荣波
2023-03-14

下一步是将插入符号位置设置为文本字段的末尾。但出于未知的原因,它似乎不起作用。它总是放在第一个字符之前。

以下是我到目前为止所做的尝试:

public void startEdit() {
    if (!isEmpty()) {
        super.startEdit();
        createTextField();
        setText(null);
        textField.end();
        setGraphic(textField);
        ((TextField)getGraphic()).end();
        textField.end();

        Platform.runLater(
                new Runnable() {
                    @Override
                    public void run() {
                        getGraphic().requestFocus();
                    }
                });
    }
}


public void startEdit() {
    if (!isEmpty()) {
        super.startEdit();
        createTextField();
        setText(null);
        setGraphic(textField);
        textField.end();

        Platform.runLater(
                new Runnable() {
                    @Override
                    public void run() {
                        getGraphic().requestFocus();
                        textField.end(); 
                        ((TextField)getGraphic()).end();
                    }
                });
    }
}


public void startEdit() {
    if (!isEmpty()) {
        super.startEdit();

        createTextField();
        setText(null);
        textField.end();
        setGraphic(textField);
        ((TextField)getGraphic()).end();
        getGraphic().requestFocus();
        ((TextField)getGraphic()).end();
        textField.end();
    }
}

合乎逻辑的方法是请求将焦点放在文本字段上,然后移动插入符号,但无论出于哪种原因,这似乎都不起作用。

共有1个答案

陈欣荣
2023-03-14

我也有同样的问题,在尝试了很多不同的方法后,我终于找到了解决方案。

不要问我为什么,但问题似乎是由为每次编辑创建一个新的TextField引起的。如果您重用现有的textfield,它可以工作!

所以试试这个:

public void startEdit() {
    if (!isEmpty()) {
        super.startEdit();

        if (textField == null)
            createTextField();
        else
            textField.setText(getString());

        setText(null);
        setGraphic(textField);

        Platform.runLater(
                new Runnable() {
                    @Override
                    public void run() {
                        textField.requestFocus();
                        textField.deselect(); 
                        textField.end(); 
                    }
                });
    }
}
 类似资料:
  • 问题内容: 我需要更改输入的插入符号位置,在该位置添加给定的数字(示例)。 是否可以执行类似此示例的操作? 我需要例如: 输入:1234。 因此插入符号的位置将为2。 新数字:9 决赛:12934 提前致谢。 问题答案: 我认为这类情况在指令中看起来更好。例如: 用法: 我从这个答案中使用了跨浏览器光标定位的功能。 演示:http : //plnkr.co/edit/5RSgzvyd8YOTaXP

  • 问题内容: 在 Chrome中 输出: 我相信在 FF中 它将看起来像这样: 并在 IE中 : 不幸的是,没有一种很好的方法可以使每个浏览器都插入一个而不是div标签或p标签,或者至少我在网上找不到任何东西。 无论如何,我现在想做的是,当我按下 按钮时 ,我希望将插入符号设置在文本的末尾,因此它应该看起来像这样: 有什么办法可以使其在 所有浏览器中 正常工作? 例: 问题答案: 以下功能将在所有主

  • 问题内容: 有人知道如何将文本框中的键盘插入符移动到特定位置吗? 例如,如果一个文本框(例如,输入元素,而不是文本区域)中包含50个字符,而我想将插入号放置在字符20之前,我该如何处理? 这与以下问题有所不同:jQuery在TextArea中设置光标位置,这需要jQuery。 问题答案: 摘自Josh Stodola的使用Javascript在Textbox或TextArea中设置键盘插入符号的位

  • 是否可以将焦点从更改为? 我尝试了以下方法: 但它不起作用。按Tab键或Enter键时,光标消失。

  • 我有一个具有移动、旋转和缩放功能的,我有所有的四角位置,我想得到其中一些假想点的位置,以便可以随着缩放和移动保持不变。请看看下面的图片,以便更好地理解它。

  • 问题内容: 我正在从Java中的Web servlet调用SAP SOAP服务。由于某种原因,每次我在请求的字段中使用特殊字符(例如“è”或“à”)时,SAP都会给我一个错误。SOAP Service的WSDL在UTF-8中定义,我已经相应地设置了字符编码,如下所示。但是我不确定这是正确的方法。另外,请注意,如果我使用SOAP UI(具有相同的信封),则请求可以正常工作,因此它一定是Java方面的