我正在制作一个将莫尔斯电线转换为英文字母的系统。我正在使用名为“write”的JTextfeild
来键入文本,而使用另一个JTextfeild
调用“View”来查看在写入时键入的内容。
但我只能设置一根莫尔斯电线。
例如,如果我在“Write”textfeild上键入A
,则只打印“.-”。当我再次输入“B”然后查看textfeild设置“-...”。我想打印一些字母。
以下是我的消息来源。
private void writeKeyReleased(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == 65) {
view.setText(".-");
} else if (evt.getKeyCode() == 66) {
view.setText("-...");
} else if (evt.getKeyCode() == 67) {
view.setText("-.-.");
} else if (evt.getKeyCode() == 68) {
view.setText("-..");
} else if (evt.getKeyCode() == 69) {
view.setText(".");
} else if (evt.getKeyCode() == 70) {
view.setText("..-.");
} else if (evt.getKeyCode() == 71) {
view.setText("--.");
} else if (evt.getKeyCode() == 72) {
view.setText("....");
} else if (evt.getKeyCode() == 73) {
view.setText("..");
} else if (evt.getKeyCode() == 74) {
view.setText(".---");
} else if (evt.getKeyCode() == 75) {
view.setText(".-.-");
} else if (evt.getKeyCode() == 76) {
view.setText(".-..");
} else if (evt.getKeyCode() == 77) {
view.setText("--");
} else if (evt.getKeyCode() == 78) {
view.setText("-.");
} else if (evt.getKeyCode() == 79) {
view.setText("---");
} else if (evt.getKeyCode() == 80) {
view.setText(".--.");
} else if (evt.getKeyCode() == 81) {
view.setText("--.-");
} else if (evt.getKeyCode() == 82) {
view.setText(".-.");
} else if (evt.getKeyCode() == 83) {
view.setText("...");
} else if (evt.getKeyCode() == 84) {
view.setText("-");
} else if (evt.getKeyCode() == 85) {
view.setText("..-");
} else if (evt.getKeyCode() == 86) {
view.setText("...-");
} else if (evt.getKeyCode() == 87) {
view.setText(".--");
} else if (evt.getKeyCode() == 88) {
view.setText("-..-");
} else if (evt.getKeyCode() == 89) {
view.setText("-.--");
} else {
view.setText("--..");
}
}
答案 0 :(得分:2)
我正在建立一个将Mose线转换为英文字母的系统。我 使用名为“write”的jtextfeild来键入文本和另一个jtextfeild 调用“查看”以查看在写入时键入的内容。
使用DocumentListener
代替JTextComponent
s代替low_level KeyListener
,否则您无法从(例如)Ctrl+C
输入字符序列(SystemClipBoard),或删除选定的字符,然后输出到其他JComponent
冻结,不进行任何更改,因为KeyListener
只能从单个Event
触发Char
此外,如果您要替换,删除,修改用户输入的DocumentFilter
或char
个chars sequence
>,您可以使用JTextField
p>
例如
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class TextLabelMirror {
private JPanel mainPanel = new JPanel();
private JTextField field = new JTextField(20);
private JTextField field1 = new JTextField(20);
public TextLabelMirror() {
field.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void insertUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateLabel(e);
}
private void updateLabel(DocumentEvent e) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
field1.setText(field.getText());
}
});
}
});
mainPanel.setLayout(new GridLayout(1, 0, 10, 0));
mainPanel.add(field);
mainPanel.add(field1);
}
public JComponent getComponent() {
return mainPanel;
}
private static void createAndShowUI() {
JFrame frame = new JFrame("TextLabelMirror");
frame.getContentPane().add(new TextLabelMirror().getComponent());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowUI();
}
});
}
}
答案 1 :(得分:0)
你不应该那样使用这个事件。将'write'文本作为字符串获取并对其进行处理:
private void writeKeyReleased(java.awt.event.KeyEvent evt) {
String input = write.getText();
StringBuilder output = new StringBuilder();
for(int cIndx = 0; cIndx < input.length(); ++cIndx){
output.append(convertChar(input.charAt(cIndx)));
}
}
private String convertChar(char c)
{
// TODO Your conversion method, modified a little:
if( c == 'a' || c == 'A') return ".-";
if( c == 'b' || c == 'B') return "-...";
// etc....
return ""; // handle as you like this case.
}