2013-10-25 32 views
0

我正在製作一個將莫爾斯電線轉換爲英文字母的系統。我使用JTextfeild來調用「write」來輸入文本,另一個JTextfeild調用「View」來查看在寫入時輸入的內容。如何設置轉換爲字母表的symbles列表?

但我只能設置一次莫爾斯電線一次。

作爲一個例子,如果我在「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

我正在做一個系統,以摩西線轉換爲英文字母。我是 ,使用jtextfeild調用「write」鍵入文本,另一個jtextfeild調用「View」查看寫入時鍵入的內容。

  • 使用DocumentListenerJTextComponent s,而不是low_level KeyListener,otheriwise可以不能夠字符的輸入序列從(例如)Ctrl+C(SystemClipBoard),或者刪除選定的字符,然後輸出到花葯JComponent小號凍結沒有任何,不進行任何更改,因爲KeyListener可以從單一的發射CharEvent只有

  • 再加上你可以在你要替換,刪除的情況下使用DocumentFilter,修改單charchars sequence鍵入用戶爲JTextField

例如

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(); 
      } 
     }); 
    } 
} 
+0

正如我可以從這個電源線field1設置在feild上鍵入的任何值。我想用一些符號(mose cord)來指定那些鍵入的鍵。所以我覺得我需要其他的或者那種選擇系統。 – Dilini

+0

不是你不需要一些特別的東西,但是注意你有兩個選擇(先決條件是莫爾斯的地圖唱歌)1.一個enless字符串contians只有morse DocumentListener 2. DocumentListener和DocumentFilter(和/或SPACE是在字符塊之後添加的)更合乎邏輯,因爲你可以阻止鍵盤上的其他鍵的輸入,允許只有點和減去具體的JTextField – mKorbel

+0

我使用NetBeans,所以你可以告訴我如何調用這個documentListner方法來設計jtextfeild,沒有這個設計線。請你能幫我解決這個問題。 – Dilini

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

實際上是什麼 – Dilini

+0

s =輸入。編輯,修正:) –

相關問題