我正在創建一個程式,它將字串輸入轉換為二進制/八進制字串并在文本欄位中顯示結果,但只有最后一個值(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);
}
}
uj5u.com熱心網友回復:
您只需要包含已經存在的內容
String binaryString = Integer.toBinaryString(ascii);//converts ascii value to binary string
resultTextField.setText(resultTextField.getText() binaryString); //to get result
uj5u.com熱心網友回復:
每當您從文本組件中添加/洗掉文本時,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()生成多個事件。
或者,如果您真的想使用 aJTextField那么您可以先使用 aStringBuffer并在轉換后附加每個字串。然后在你的回圈之外,你可以設定一次文本。就像是:
StringBuffer buffer = new StringBuffer();
for(int ascii : textArray)
{
String octalString = Integer.toOctalString(ascii);
//resultTextField.setText(octalString);
buffer.append(octalString);
}
resultTextField.setText(buffer.toString());
只會生成一個insertUpdate()事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482333.html
