如何设置转换为字母的符号列表?

时间:2013-10-25 08:00:54

标签: java swing if-statement jtextfield morse-code

我正在制作一个将莫尔斯电线转换为英文字母的系统。我正在使用名为“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("--..");
    }

}         

2 个答案:

答案 0 :(得分:2)

  

我正在建立一个将Mose线转换为英文字母的系统。我   使用名为“write”的jtextfeild来键入文本和另一个jtextfeild   调用“查看”以查看在写入时键入的内容。

  • 使用DocumentListener代替JTextComponent s代替low_level KeyListener,否则您无法从(例如)Ctrl+C输入字符序列(SystemClipBoard),或删除选定的字符,然后输出到其他JComponent冻结,不进行任何更改,因为KeyListener只能从单个Event触发Char

  • 此外,如果您要替换,删除,修改用户输入的DocumentFiltercharchars sequence ,您可以使用JTextField p>

例如

enter image description here

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.
}