如何解决当它位于文本字段的边缘时,如何移动文本字段锚以跟随插入符号?
我的 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 举报,一经查实,本站将立刻删除。