微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当它位于文本字段的边缘时,如何移动文本字段锚以跟随插入符号?

如何解决当它位于文本字段的边缘时,如何移动文本字段锚以跟随插入符号?

我的 GUI 计算器有一个淡化版本。最终会有更好的键盘支持作为输入。但我需要“|”作为我的插入符或光标行。但是代码似乎并没有像我预测的那样工作。

有没有办法解决这个问题?或者也许有更好的方法来做到这一点?

基本上我需要改变文本字段的锚点并在左边缘或右边缘跟随光标线,但我不知道如何做到这一点

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
//import javafx.scene.input.KeyEvent;
import javafx.scene.layout.*;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

public class Fake extends Application
{

    TextField equationText=new TextField("¦shefamefesSeeffesetText(hefsffsgbtbe and like. Hit tfe ann" +
            "oyinefefefl thfefe defffsfes. Blahfesfelahefe);");

    public void start(Stage primaryStage)
    {
        equationText.setAlignment(Pos.CENTER_RIGHT);
        equationText.setdisable(true);
        equationText.setopacity(1);     
        equationText.setStyle("-fx-border-color:black");
        equationText.setPrefSize(360,30);

        VBox pane=new VBox(5);
        pane.getChildren().add(equationText);

        Scene scene=new Scene(pane);
        scene.setonKeypressed(event -> keyboardControls(event));

        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.show();
    }

    int caretCounter =0;
    void moveIndex(char c)
    {
        int memoryCaret;

        if(c=='z')
        {
            //left
            String pieThing=equationText.getText();
            System.out.println("Ding\t\t\t"+pieThing);
            System.out.println("Size of string "+pieThing.length());
            System.out.println("index of thing "+pieThing.indexOf("¦"));

            if(pieThing.indexOf("¦")>0)
            {
                caretCounter--;
                memoryCaret =equationText.getcaretposition();
                int i=pieThing.indexOf("¦");
                pieThing=pieThing.replace("¦","");
                StringBuilder pieThingBuilder=new StringBuilder(pieThing);
                pieThingBuilder.insert(i-1,"¦");
                pieThing=pieThingBuilder.toString();
                i=pieThing.indexOf("¦");
                equationText.setText(pieThing);

                if(caretCounter<=0) {
                    caretCounter=0;
                    equationText.positionCaret(i+90);
                    equationText.positionCaret(i);
                }
                else {
                    equationText.positionCaret(memoryCaret);
                }
                //equationText.positionCaret(i+1);
                System.out.println("SIZE "+equationText.getLength());
                System.out.println("ANCHOR "+equationText.getAnchor());
                System.out.println("Done with left "+pieThing);
                System.out.println("count left "+ caretCounter);
                System.out.println("CARET "+equationText.getcaretposition());
            }
            else
            {
                System.out.println("left Failed");
            }
        }
        else
        {
            //right
            String pieThing=equationText.getText();
            System.out.println("Ding\t\t\t"+pieThing);
            System.out.println("Size of string "+pieThing.length());
            System.out.println("index of thing "+pieThing.indexOf("¦"));

            if(pieThing.indexOf("¦")+1!=pieThing.length())
            {
                caretCounter++;
                memoryCaret =equationText.getcaretposition();
                int i=pieThing.indexOf("¦");
                pieThing=pieThing.replace("¦","");
                StringBuilder pieThingBuilder=new StringBuilder(pieThing);
                pieThingBuilder.insert(i+1,"¦");
                pieThing=pieThingBuilder.toString();
                i=pieThing.indexOf("¦");
                equationText.setText(pieThing);

                if(caretCounter>=51) {
                    caretCounter=51;
                    equationText.positionCaret(i + 1);
                }
                else
                {
                    equationText.positionCaret(memoryCaret);
                }
                //equationText.positionCaret(i+1);
                System.out.println("SIZE "+equationText.getLength());
                System.out.println("ANCHOR "+equationText.getAnchor());
                System.out.println("Done with right "+pieThing);
                System.out.println("count right "+ caretCounter);
                System.out.println("CARET "+equationText.getcaretposition());

            }
            else
            {
                System.out.println("right Failed");
            }

        }
    }
    void keyboardControls(javafx.scene.input.KeyEvent key)
    {

        if(key.getCode()==KeyCode.Z)
            moveIndex('z');
        else if(key.getCode()==KeyCode.X)
            moveIndex('x');
        else if(key.getCode()==KeyCode.DIGIT0)
            press0();
    }

    void press0()
    {
        String integrater=equationText.getText();
        integrater=integrater.replace("¦","0¦");
        equationText.setText(integrater);
        equationText.positionCaret(integrater.indexOf("¦")+1); // important?
        System.out.println("carret from added "+equationText.getcaretposition());
    }

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。