GDearth
GDearth

Reputation: 11

two text fields, one input, one output

I have to complete this code with these simple measures. Cannot do anything overly complicated. I want to translate from the top input text field and output on the bottom text field. So far, it looks right, but my translation simply outputs in the same text field as my input. I am a noob, and checked my notes and textbook, and cannot figure out how to change the output to the bottom field. It just doesn't seem to be possible with this level of code. The translation is right. I think I need to modify the Translate button, but am not sure where to indicate what. It works fine if I just wanted to output in my input box. Well, here is my code so far:

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


}

Upvotes: 1

Views: 293

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347334

but my translation simply outputs in the same text field as my input

That's because that's what you're telling it to do

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

So I assume, phrase is the input and translatedphrase is the output, so that would mean, to fix your immediate issue, all you need to do is replace phrase with translatedphrase

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

I would also suggest you change the other setText calls you're making against phrase to translatedphrase as well

This...

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);

is also an issue, as you never actually add translatedphrase to anything, you just re-add phrase to namePanel again

So, I assume it should be

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);

Upvotes: 2

Related Questions