首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有任何方法来设置文本字段中的所有结果值?它只按预期设置最后一个值,但我希望在resultTextField中设置所有值。

是否有任何方法来设置文本字段中的所有结果值?它只按预期设置最后一个值,但我希望在resultTextField中设置所有值。
EN

Stack Overflow用户
提问于 2022-05-25 16:06:40
回答 2查看 37关注 0票数 0

我正在创建一个程序,该程序将字符串输入转换为二进制/八进制字符串,并在文本字段中显示结果,但只有最后一个值(二进制/八进制字符串为1个单个字符)才会按预期显示。但是,还有其他方法来展示所有的价值吗?

代码语言:javascript
运行
复制
    resultTextField = new JTextField();
    resultTextField.setBounds(10,170,200,100);
    resultTextField.setForeground(Color.green);
    resultTextField.setBackground(Color.black);
    resultTextField.setOpaque(true);
    resultTextField.setVisible(visibilty);


@Override
public void actionPerformed(ActionEvent e) {    
    if (e.getSource()==binaryButton) {
    convertToBinary();//to convert the string to binary string
    }
    
    if(e.getSource()== octaButton) {
    convertToOcta();//to convert to octal string
    }       
}   

public void convertToBinary() {
visibilty = true;

将输入文本(maintextField (字符串))转换为字符数组

代码语言:javascript
运行
复制
char[] textArray = mainTextField.getText().toCharArray(); 
for(int ascii : textArray)//this will convert individual characters to their ascii value
{
    String binaryString = Integer.toBinaryString(ascii);//converts ascii value to binary string
    resultTextField.setText(binaryString); //to get result
    resultTextField.setVisible(visibilty);
    //System.out.println(binaryString);
    }
}

与converToBinary相同,但输入被转换为八进制字符串。

代码语言:javascript
运行
复制
public void convertToOcta() {
visibilty = true;
String text = mainTextField.getText();
char[] textArray = text.toCharArray();
for(int ascii : textArray)
{
String octalString = Integer.toOctalString(ascii);
    resultTextField.setText(octalString);
    //System.out.println(octalString); 
    }
resultTextField.setVisible(visibilty);

    }
  }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-25 16:13:56

你只需要包括已经存在的内容

代码语言:javascript
运行
复制
String binaryString = Integer.toBinaryString(ascii);//converts ascii value to binary string
resultTextField.setText(resultTextField.getText() + binaryString); //to get result
票数 1
EN

Stack Overflow用户

发布于 2022-05-25 16:30:38

每当您从文本组件中添加/删除文本时,都会生成DocumentEvent。当然,对于这个简单的任务,您可能并不关心DocumentEvents,但是在使用文本组件时,需要考虑到这一点。

您可以使用以下简单代码:

代码语言:javascript
运行
复制
resultTextField.setText( resultTextField.getText() + octalString );

这种方法将导致多个removeUpdate()insertUpdate()事件,而实际上您可能只想生成单个insertUpdate()事件。而且,这是相对低效的,因为每次设置文本时,都需要清除文档中的所有文本,然后使用新文本重新构建文档。

另一种选择是更新文本字段的文档:

代码语言:javascript
运行
复制
Document doc = resultTextField().getDocument().
doc.insertString(...).

这将导致多个insertUpdate()事件。另外,请注意,您需要使用try/catch逻辑来处理insertString(...)方法上的异常。

更简单的方法可能是使用单行JTextArea,然后只需使用append(...)方法来追加新文本。它更新了上面所示的文档,但是它已经处理了异常逻辑,所以您不需要担心它。

代码语言:javascript
运行
复制
//resultTextField.setText(octalString);
resultTextArea.append(octalString);

这将导致生成多个insertUpdate()事件。

或者,如果您真的想使用JTextField,那么您可以首先使用一个StringBuffer,并在转换后追加每个字符串。然后,在循环之外,您可以设置文本一次。类似于:

代码语言:javascript
运行
复制
StringBuffer buffer = new StringBuffer();

for(int ascii : textArray)
{
    String octalString = Integer.toOctalString(ascii);
    //resultTextField.setText(octalString);
    buffer.append(octalString);
}

resultTextField.setText(buffer.toString());

只生成一个insertUpdate()事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72380995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档