gpt4 book ai didi

java - 如何在 Swing 中将动态键入的文本存储在字符串中

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:19 24 4
gpt4 key购买 nike

我正在尝试开发一个十六进制编辑器,其中编辑器面板提供了关键监听器,并且通过键盘输入将转换为相应的输入。然而,问题在于保存隐藏的输入。目前一次仅转换一个击键值。我想在字符串中使用这个转换后的 input() 作为一堆,并将其用于其他目的。我尝试将转换后的文本保存在字节数组中,但它返回我输入的第一个值,无论之后的输入是什么。

package gui.hex;

import javax.swing.*;

import cryptool.Test;

import java.awt.*;
import java.awt.event.*;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;

public class JHexEditorASCII extends JComponent implements MouseListener,
KeyListener {

private static final long serialVersionUID = 5636121664420538046L;
private JHexEditor he;
private static CharsetEncoder encoder = Charset.forName("UTF-8")
.newEncoder();
public static String modifiedText;
public static byte temp[];

public static byte[] getTemp() {
return temp;
}

public void setTemp(byte[] temp) {
this.temp = temp;
}

protected JHexEditorASCII(JHexEditor he) {
this.he = he;
addMouseListener(this);
addKeyListener(this);
addFocusListener(he);
}

public Dimension getPreferredSize() {
debug("getPreferredSize()");
return getMinimumSize();
}

public Dimension getMinimumSize() {
debug("getMinimumSize()");

Dimension d = new Dimension();
FontMetrics fn = getFontMetrics(JHexEditor.font);
int h = fn.getHeight();
int nl = he.getLines();
d.setSize((fn.stringWidth(" ") + 1) * (16) + (he.border * 2) + 1, h
* nl + (he.border * 2) + 1);
return d;
}

public void paint(Graphics g) {
debug("paint(" + g + ")");
debug("cursor=" + he.cursor + " buff.length=" + he.buff.length);
Dimension d = getMinimumSize();

// sets the color to the background.
g.setColor(Color.orange);
g.fillRect(0, 0, d.width, d.height);
g.setColor(Color.black);

g.setFont(JHexEditor.font);

// ascii data
int ini = he.getInitial() * 16;
int fin = ini + (he.getLines() * 16);
if (fin > he.buff.length)
fin = he.buff.length;

int x = 0;
int y = 0;
for (int n = ini; n < fin; n++) {
if (n == he.cursor) {

// sets color for the focus cursor it used to be in blue color.
g.setColor(Color.red);
if (hasFocus())
he.background(g, x, y, 1);
else
he.table(g, x, y, 1);
if (hasFocus())
g.setColor(Color.white);
else
g.setColor(Color.black);
} else {
g.setColor(Color.black);
}

// builds a character object
String s;

if (encoder.isLegalReplacement(new byte[] { he.buff[n] }))
s = "" + new Character((char) he.buff[n]);
else
s = ".";

// compares the input supplied
// if ((he.buff[n] < 20) || (he.buff[n] > 126))

// converts the input entered into string
// s = ".";
// displaying of the text goes here.

// displays the input

System.out.println("the typed in string is:" + s);

temp = s.getBytes();
setTemp(temp);

setModifiedText(s);

he.printString(g, s, (x++), y);

if (x == 16) {
x = 0;
y++;
}
}

}

private void debug(String s) {
if (he.DEBUG)
System.out.println("JHexEditorASCII ==> " + s);
}

public void dispaly(Graphics g) {
int x = 0;
int y = 0;

he.printString(g, Test.getK(), (x++), y);
if (x == 16) {
x = 0;
y++;
}
}

// calculate the position of the mouse
public int calculateMousePosition(int x, int y) {
FontMetrics fn = getFontMetrics(JHexEditor.font);
x = x / (fn.stringWidth(" ") + 1);
y = y / fn.getHeight();
debug("x=" + x + " ,y=" + y);
return x + ((y + he.getInitial()) * 16);
}

// mouselistener
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
// double clicked
he.setNewTextListener.actionPerformed(new ActionEvent(this, 0,
"NEWASCII"));
}

debug("mouseClicked(" + e + ")");
he.cursor = calculateMousePosition(e.getX(), e.getY());
this.requestFocus();
he.repaint();
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}

public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}

// KeyListener
public void keyTyped(KeyEvent e) {
debug("keyTyped(" + e + ")");

// only add content, if buffer is large enough
if (he.buff.length > he.cursor) {
he.buff[he.cursor] = (byte) e.getKeyChar();

if (he.cursor != (he.buff.length - 1))
he.cursor++;
// change this
// System.out.println( he.buff.toString());

he.repaint();
}
}

public void keyPressed(KeyEvent e) {
debug("keyPressed(" + e + ")");
he.keyPressed(e);
}

public void keyReleased(KeyEvent e) {
debug("keyReleased(" + e + ")");
}

public boolean isFocusTraversable() {
return true;
}

public static String getModifiedText() {
return modifiedText;
}

public void setModifiedText(String modifiedText) {
this.modifiedText = modifiedText;
}
}

最佳答案

  • 开发一个十六进制编辑器(encoder.isLegalReplacement...)

  • JTextFieldDocumentFilter 一起使用,或者最简单的方法是 JFormatterTextField,而不是通过使用 paint()JComponent

    来绘制字符
  • Swing JComponents 使用 paintComponent(而不是 paint())

  • 使用 DocumentFilter 将 DocumentListener 添加到 JTextFieldJFormatterTextField

  • 有趣的方法可能是构建/准备/创建一个 hex () 的 ArrayList 并使用 AutoComplete JTextField

关于java - 如何在 Swing 中将动态键入的文本存储在字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13271529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com