2017-07-21 19 views
1

これらの簡単な方法でこのコードを完成させる必要があります。過度に複雑なことはできません。私は一番上の入力テキストフィールドから翻訳し、一番下のテキストフィールドに出力したいと思います。これまでのところ、正しく見えましたが、翻訳は入力と同じテキストフィールドに出力されます。私はノブであり、メモや教科書をチェックして、ボトムフィールドに出力を変更する方法を理解することはできません。このレベルのコードでは可能ではないようです。翻訳は正しいです。私は、Translateボタンを変更する必要があると思うが、何を指示するか分からない。私が入力ボックスに出力したければうまく動作します。さて、ここに私のコードは、これまでのところです:2つのテキストフィールド、1つの入力、1つの出力

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 



public class Translator4 extends JFrame implements ActionListener 
{ 


public static final int WIDTH = 500; 
public static final int HEIGHT = 500; 
public static final int NUMBER_OF_CHAR = 50; 

private JTextField phrase; 
private JTextField translatedphrase; 

public static void main(String[] args) 
{ 
    Translator4 gui = new Translator4(); 
    gui.setVisible(true); 
} 

public Translator4() 
{ 
    //title bar and overall size 
    super("Pig Latin Translator v.4.0"); 
    setSize(WIDTH, HEIGHT); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new GridLayout(3,1)); 

    //create input text filed 
    JPanel namePanel = new JPanel(); 
    namePanel.setLayout(new BorderLayout()); 
    namePanel.setBackground(Color.WHITE); 

    phrase = new JTextField(NUMBER_OF_CHAR); 
    namePanel.add(phrase, BorderLayout.CENTER); 
    JLabel nameLabel = new JLabel("Enter the phrase in English to be translated:"); 
    namePanel.add(nameLabel, BorderLayout.NORTH); 

    add(namePanel); 

    //create the buttons 
    JPanel buttonPanel= new JPanel(); 
    buttonPanel.setLayout(new FlowLayout()); 
    buttonPanel.setBackground(Color.GREEN); 

    JButton actionButton = new JButton("Translate"); 
    actionButton.addActionListener(this); 
    buttonPanel.add(actionButton); 

    JButton clearButton = new JButton("Clear"); 
    clearButton.addActionListener(this); 
    buttonPanel.add(clearButton); 

    add(buttonPanel); 

    //create the output text field  
    JPanel namePanel2 = new JPanel(); 
    namePanel2.setLayout(new BorderLayout()); 
    namePanel2.setBackground(Color.WHITE); 

    translatedphrase = new JTextField(NUMBER_OF_CHAR*2); //output will be larger so I multiplied it by 2 
    namePanel.add(phrase, BorderLayout.CENTER); 
    JLabel nameLabel2 = new JLabel("Translation:"); 
    namePanel2.add(nameLabel2, BorderLayout.NORTH); 

    add(namePanel2); 
} 

public void actionPerformed(ActionEvent e) 
{ 
    String actionCommand = e.getActionCommand(); 



    if (actionCommand.equals("Translate")) //when the user wants a translation, this block executes 
    { 

     String[] words=new String[100]; //takes up to 100 words 
     String sentence = phrase.getText(); //the user input made into a string 
     String newSentence=""; //the output string generated   
     words = sentence.split(" "); //splits based on spaces, no other punctuation allowed 

     for (int index=0; index< words.length; index++) //steps thru the array of words 
     { 
      char firstChar = words[index].charAt(0); //rules for vowels, 'one' becomes 'oneway' 
      if (firstChar=='a'||firstChar=='e'||firstChar=='i'||firstChar=='o'||firstChar=='u') 
      { 
       words[index] = words [index] + "way"; 

       newSentence=newSentence + " " + words[index]; //adds the word just now modified to new sentence 

      } 
      else //rules for words that don't start with vowels, 'blank' becomes 'lankbay' 
      { 
       firstChar = ' '; 
       words[index] = (words[index]).substring(1,(words[index].length())) 
         + (words[index]).charAt(0) + "ay"; 

       newSentence=newSentence + " " + words[index]; //adds the word just now modified to new sentence 
      } 

      phrase.setText(newSentence); //sends the new sentence back for output... problem here 
     } 
    } 

    else if (actionCommand.equals("Clear")) 
     phrase.setText(""); 

    else 
     phrase.setText("Unexpected error."); 
} 


} 
+0

べきであると仮定します。これは、入力と同じボックスに置き、上書きします。 – GDearth

+0

トップテキストフィールドに戻すのではなく、出力を翻訳されたテキストフィールドの下につなぐにはどうすればいいですか? – GDearth

+0

固定。私はその行を次の行に変更するだけでなく、\ n を翻訳しました.phrase.setText(newSentence); しかし、私の2番目のフィールドは間違っていました。私はそれを次のように変更しました: translatedphrase = new JTextField(NUMBER_OF_CHAR * 2); namePanel2.add(translatedphrase、BorderLayout.CENTER); JLabel nameLabel2 = new JLabel( "翻訳:"); namePanel2.add(nameLabel2、BorderLayout.NORTH); \t ありがとうございました。それは私が正しい場所を探していた。 – GDearth

答えて

2

が、私の翻訳は、単に私の入力と同じテキストフィールドに出力しているが、あなたが

を行うには、それを言っているものだからだ

phrase.setText(newSentence); //sends the new sentence back for output... problem here 

だから私はphraseを入力してtranslatedphraseである、と仮定が出力され、そのためには、意味するだろうあなたの当面の問題を解決するために、あなたがする必要があるすべてをr translatedphrase

translatedphrase.setText(newSentence); //sends the new sentence back for output... no more problem 

とeplace phrase私も

translatedphrase = new JTextField(NUMBER_OF_CHAR * 2); //output will be larger so I multiplied it by 2 
namePanel.add(phrase, BorderLayout.CENTER); 
JLabel nameLabel2 = new JLabel("Translation:"); 
namePanel2.add(nameLabel2, BorderLayout.NORTH); 

も問題です...あなたはこの

同様 translatedphrasephraseに対してあなたが作っている他の setTextの呼び出しを変更することをお勧め実際に決して translatedphraseを追加することはないので、 phrasenamePanelにもう一度書き換えてください。

だから、私はそれはそれはすでに正しい出力を送り返す

translatedphrase = new JTextField(NUMBER_OF_CHAR * 2); //output will be larger so I multiplied it by 2 
namePanel2.add(translatedphrase, BorderLayout.CENTER); 
JLabel nameLabel2 = new JLabel("Translation:"); 
namePanel2.add(nameLabel2, BorderLayout.NORTH); 
関連する問題