有没有办法在文本字段中设置所有结果值?它只按预期设置最后一个值,但我希望在 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
我正在创建一个将字符串输入转换为 binary/octal 字符串并在文本字段中显示结果的程序,但只有最后一个值(binary/octal 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[] 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
每当您 add/remove 来自文本组件的文本时,都会生成 DocumentEvent
。当然,对于这个简单的任务,您可能不关心 DocumentEvents,但它是将来使用文本组件时需要考虑的事情。
您可以使用像这样的简单代码:
resultTextField.setText( resultTextField.getText() + octalString );
这种方法将导致多个 removeUpdate()
和 insertUpdate()
事件,而实际上您可能只想生成一个 insertUpdate()
事件。这也是相对低效的,因为每次设置文本时都需要清除文档中的所有文本,然后用新文本重建文档。
另一种选择是更新文本字段的文档:
Document doc = resultTextField().getDocument().
doc.insertString(...).
这将导致多个 insertUpdate()
事件。另请注意,您将需要使用 try/catch 逻辑来处理 insertString(...)
方法上的异常。
一种更简单的方法可能是使用单行 JTextArea
,然后您可以只使用 append(...)
方法追加新文本。它会如上所示更新文档,但它已经处理了异常逻辑,因此您无需担心。
//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()
事件。
我正在创建一个将字符串输入转换为 binary/octal 字符串并在文本字段中显示结果的程序,但只有最后一个值(binary/octal 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[] 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
每当您 add/remove 来自文本组件的文本时,都会生成 DocumentEvent
。当然,对于这个简单的任务,您可能不关心 DocumentEvents,但它是将来使用文本组件时需要考虑的事情。
您可以使用像这样的简单代码:
resultTextField.setText( resultTextField.getText() + octalString );
这种方法将导致多个 removeUpdate()
和 insertUpdate()
事件,而实际上您可能只想生成一个 insertUpdate()
事件。这也是相对低效的,因为每次设置文本时都需要清除文档中的所有文本,然后用新文本重建文档。
另一种选择是更新文本字段的文档:
Document doc = resultTextField().getDocument().
doc.insertString(...).
这将导致多个 insertUpdate()
事件。另请注意,您将需要使用 try/catch 逻辑来处理 insertString(...)
方法上的异常。
一种更简单的方法可能是使用单行 JTextArea
,然后您可以只使用 append(...)
方法追加新文本。它会如上所示更新文档,但它已经处理了异常逻辑,因此您无需担心。
//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()
事件。