0

モールス信号をアルファベットに変換するシステムを作っています。JTextfeildテキストを入力するために「書き込み」と呼ばJTextfeildれ、書き込み時に入力されたビューに「ビュー」と呼ばれる別の呼び出しを使用しています。

でもモールスコードは一度しかセットできません。

例として、A「Write」テキストフィールドに入力すると、「.-」のみが印刷されます。そして、もう一度「B」と入力すると、テキストフィールドセット「-...」が表示されます。文字数を印字したい。

以下は私のソースコードです。

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

モーゼコードを英語のアルファベットに変換するシステムを作っています。「書き込み」と呼ばれる jtextfeild を使用してテキストを入力し、別の jtextfeild 呼び出し「ビュー」を使用して、書き込み時に入力されたビューを表示します。

  • low_level の代わりにDocumentListenerfor s を使用します。そうしないと、(たとえば) (SystemClipBoard) から一連の文字を入力したり、選択した文字を削除したりしてから、anther s に何も出力せずにフリーズすることができず、変更は行われません。シングルからのみJTextComponentKeyListenerCtrl+CJComponentKeyListenerEventChar

  • さらに、単一またはユーザーが入力したDocumentFilterものを置換、削除、変更する場合に使用できますcharchars sequenceJTextField

例えば

ここに画像の説明を入力

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 に答える