0

我正在制作一个将莫尔斯电码转换为英文字母的系统。我正在使用JTextfeild称为“write”来键入文本,另一个JTextfeild调用“View”来查看在写入时键入的内容。

但我一次只能设置一根莫尔斯线。

例如,如果我A在 "Write" textfeild 上键入它,它只会打印 ".-" 。当我再次输入 "B" 时,查看 textfeild set "-..." 。我想打印字母的数量。

下面给出的是我的源线。

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("--..");
    }

}         
4

2 回答 2

2

我正在制作一个将 Mose 绳索转换为英文字母的系统。我正在使用名为“write”的 jtextfeild 来键入文本,而另一个 jtextfeild 调用“View”来查看在 write 时键入的内容。

  • 使用DocumentListenerfor JTextComponents 而不是 low_level KeyListener,否则您将无法从(例如)Ctrl+C(SystemClipBoard)输入字符序列,或删除选定的字符,然后输出到 anther JComponents freeze 没有任何内容,不进行任何更改,因为KeyListener可以触发仅来自Event单人Char

  • 另外,您可以DocumentFilter在要替换,删除,修改单个charchars sequence由用户键入的情况下使用JTextField

例如

在此处输入图像描述

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();
            }
        });
    }
}
于 2013-10-25T08:06:48.483 回答
0

你不应该那样使用事件。获取“写”文本作为字符串并处理它:

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.
}
于 2013-10-25T08:17:27.577 回答