繁体   English   中英

有没有办法在文本字段中设置所有结果值? 它只按预期设置最后一个值,但我希望全部设置在 resultTextField

[英]Is there any way to set all result values in the textfield? It sets only last value as expected but i want all to be set in the resultTextField

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

    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 (String)) 转换为 char 数组

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 相同,但输入转换为八进制字符串

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);

    }
  }

您只需要包含已经存在的内容

String binaryString = Integer.toBinaryString(ascii);//converts ascii value to binary string
resultTextField.setText(resultTextField.getText() + binaryString); //to get result

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

您可以使用简单的代码,例如:

resultTextField.setText( resultTextField.getText() + octalString );

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

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

Document doc = resultTextField().getDocument().
doc.insertString(...).

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

一种更简单的方法可能是使用单行JTextArea ,然后您可以使用append(...)方法来附加新文本。 如上所示,它会更新 Document,但它已经处理了异常逻辑,因此您无需担心。

//resultTextField.setText(octalString);
resultTextArea.append(octalString);

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

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

StringBuffer buffer = new StringBuffer();

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

resultTextField.setText(buffer.toString());

只会生成一个insertUpdate()事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM