Как вызвать этот метод?

Целью программы является создание своего рода переводчика, в котором вы сохраняете слова и переводы, а затем ищете их и даете желаемый перевод. Испанский язык является языком ввода (английский и французский переводы). , мой вопрос, как вызвать метод: «поиск слова» из интерфейса ... Буду признателен, если вы обнаружите какие-либо ошибки в моих методах! Вот где у меня есть метод:

public class Traductor {

    public Traduccion arregloFra [] = new Traduccion [10];
    public Traduccion arregloIng [] = new Traduccion [10];



    public Traductor(){

    }

    public void agregar(Traduccion t1, int i, int index){

        if (i==1){
            arregloIng [index] = t1;
        }
        if (i ==0){
            arregloFra [index] = t1;
        }
    }
    public String busquedapalabra(String palabra, int dick){
        String traduccion = "null";
        if (dick ==1){

            for (int i = 0; i<arregloIng.length; i++)
                if(palabra.equalsIgnoreCase(arregloIng[i].getEspañol())){
                    traduccion = arregloIng[i].getIngles();
                    break;
                }
        }


    else{

        for(int i =0; i<arregloFra.length; i++){
            if (palabra.equalsIgnoreCase(arregloFra[i].getEspañol())){
                traduccion = arregloFra[i].getFrances();
                break;
            }
        }
    }
    return traduccion;
}
}

Здесь я хочу назвать его:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JSplitPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class TraductorApp {

    private JFrame frame;
    private JTextField textPalabra;
    private JTextField textTraduccion;
    private JTextField NumPalIng;
    private JTextField NumPalFran;
    private JTextField AgregarEsp;
    private JTextField AgregarIng;
    private JTextField AgregarFran;
    Traductor arr1 = new Traductor();
    Traduccion trad1 = new Traduccion();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TraductorApp window = new TraductorApp();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public TraductorApp() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lblConsultas = new JLabel("Consultas");
        lblConsultas.setBounds(10, 11, 67, 14);
        frame.getContentPane().add(lblConsultas);

        JLabel lblPalabra = new JLabel("Palabra");
        lblPalabra.setBounds(10, 36, 46, 14);
        frame.getContentPane().add(lblPalabra);

        JLabel lblTraduccin = new JLabel("Traducci\u00F3n");
        lblTraduccin.setBounds(10, 61, 67, 14);
        frame.getContentPane().add(lblTraduccin);

        JLabel lblDicccionarios = new JLabel("Diccionarios");
        lblDicccionarios.setBounds(10, 105, 67, 14);
        frame.getContentPane().add(lblDicccionarios);

        JLabel lblIngls = new JLabel("Ingl\u00E9s");
        lblIngls.setBounds(10, 130, 46, 14);
        frame.getContentPane().add(lblIngls);

        JLabel lblAdiciones = new JLabel("Adiciones");
        lblAdiciones.setBounds(10, 155, 46, 14);
        frame.getContentPane().add(lblAdiciones);

        JLabel lblEnEspaol = new JLabel("En espa\u00F1ol");
        lblEnEspaol.setBounds(10, 180, 67, 14);
        frame.getContentPane().add(lblEnEspaol);

        JLabel lblEnIngls = new JLabel("En ingl\u00E9s");
        lblEnIngls.setBounds(10, 212, 46, 14);
        frame.getContentPane().add(lblEnIngls);

        JLabel lblEnFrancs = new JLabel("En franc\u00E9s");
        lblEnFrancs.setBounds(10, 237, 67, 14);
        frame.getContentPane().add(lblEnFrancs);

        textPalabra = new JTextField();
        textPalabra.setBounds(109, 33, 117, 20);
        frame.getContentPane().add(textPalabra);
        textPalabra.setColumns(10);

        textTraduccion = new JTextField();
        textTraduccion.setBounds(109, 58, 117, 20);
        frame.getContentPane().add(textTraduccion);
        textTraduccion.setColumns(10);

        NumPalIng = new JTextField();
        NumPalIng.setEditable(false);
        NumPalIng.setBounds(109, 127, 86, 20);
        frame.getContentPane().add(NumPalIng);
        NumPalIng.setColumns(10);

        NumPalFran = new JTextField();
        NumPalFran.setEditable(false);
        NumPalFran.setBounds(316, 127, 86, 20);
        frame.getContentPane().add(NumPalFran);
        NumPalFran.setColumns(10);

        JLabel lblFrancs = new JLabel("Franc\u00E9s");
        lblFrancs.setBounds(260, 130, 46, 14);
        frame.getContentPane().add(lblFrancs);

        AgregarEsp = new JTextField();
        AgregarEsp.setBounds(109, 177, 86, 20);
        frame.getContentPane().add(AgregarEsp);
        AgregarEsp.setColumns(10);

        AgregarIng = new JTextField();
        AgregarIng.setBounds(109, 206, 86, 20);
        frame.getContentPane().add(AgregarIng);
        AgregarIng.setColumns(10);

        AgregarFran = new JTextField();
        AgregarFran.setBounds(109, 234, 86, 20);
        frame.getContentPane().add(AgregarFran);
        AgregarFran.setColumns(10);

        JButton btnEnIngls = new JButton("En ingl\u00E9s");
        btnEnIngls.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                   int dick =1;
                   String a = textPalabra.getText();
                   String traduccion =  arr1.busquedapalabra(a,dick);

                    textTraduccion.setText(traduccion);
            }
        });
        btnEnIngls.setBounds(236, 57, 89, 23);
        frame.getContentPane().add(btnEnIngls);

        JButton btnEnFrancs = new JButton("En franc\u00E9s");
        btnEnFrancs.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int i =0;
              Traduccion t1 = new Traduccion(AgregarEsp.getText(),null,AgregarFran.getText());
              t1.guardarinfo(t1, i);
              AgregarEsp.setText("");
              AgregarFran.setText("");
            }
        });
        btnEnFrancs.setBounds(335, 57, 89, 23);
        frame.getContentPane().add(btnEnFrancs);

        JButton btnAdicionarIng = new JButton("Adicionar");
        btnAdicionarIng.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                   int i =1;
                    Traduccion t1 = new Traduccion(AgregarEsp.getText(),AgregarIng.getText(),null);
                    t1.guardarinfo(t1, i);

                    AgregarEsp.setText("");
                    AgregarIng.setText("");

                Traduccion trad1 = new Traduccion(AgregarEsp.getText(),AgregarIng.getText(),AgregarFran.getText());

            }
        });
        btnAdicionarIng.setBounds(236, 208, 89, 23);
        frame.getContentPane().add(btnAdicionarIng);

        JButton btnAdicionarFran = new JButton("Adicionar");
        btnAdicionarFran.setBounds(236, 233, 89, 23);
        frame.getContentPane().add(btnAdicionarFran);
    }
}
});
0
задан 19.03.2016, 02:44
1 ответ

Ты не даешь достаточно информации, чтобы определять твою проблему, в самом деле, нет многой логики в том, чтобы спрашивать, как звонить в этот метод. Просто создай объект и позвони в метод; нет большей тайны.

Однако оно мне кажется развлекательным и интересным упражнением, чтобы изучать язык. Я представил другую альтернативу, например, используя словари и услуги, даже [anti] главный файл Синглтон и методы default Java 8.

Переводчики

Переводчики одинокие два пустых класса, которые они осуществляют Translater. Этот интерфейс получает текст, который нужно переводить, и словарь, в котором он должен искать. У этого интерфейса есть метод default что доступен с Java 8; таким образом мы не повторяем код в осуществлениях.

public interface Translater {

    public default String translate(String text, Dictionary dic) {
        String[] words = text.split(" ");
        String translation = "";

        for(String word : words) {
            String translateWord = dic.searchWord(word);
            translation += translateWord + " ";
        }
        return translation;
    }
}

И Ваши осуществления (ты опустошаешь, потому что они ничего не должны делать):

public class EnglishTranslater implements Translater {


}

public class FrenchTranslater implements Translater {


}

Словари

Специализирующиеся словари (дети) должны быть singletons, потому что он только интересует, что существовал единственный словарь каждого языка.

public abstract class Dictionary {

    protected final static Map<String, String> dictionary = new HashMap<>();

    public final void addEntry(String word, String translate) {
        dictionary.put(word, translate);
    }

    public final String searchWord(String word) {
        String translate = "Sin resultados";
        for(Map.Entry<String, String> entry : dictionary.entrySet()) {
            if(entry.getKey().equals(word)) {
                translate = entry.getValue();
            }
        }
        return translate;
    }
}

И Ваши осуществления. Здесь осуществления да должны контейнер код, потому что мы добавляем слова к словарю, когда ClassLoader загружает классы, и потому что мы делаем их Синглтоном.

public class SpanishEnglishDictionary extends Dictionary {

    private final static SpanishEnglishDictionary INSTANCE
                         = new SpanishEnglishDictionary();

    static {
        dictionary.put("casa", "house");
        dictionary.put("perro", "dog");
        dictionary.put("gato", "cat");
        dictionary.put("corriendo", "running");
        dictionary.put("alrededor", "around");
        dictionary.put("el", "the");
        dictionary.put("está", "is");
        dictionary.put("la", "the");
        dictionary.put("de", "of");
    }

    private SpanishEnglishDictionary() {

    }

    public static SpanishEnglishDictionary getInstance() {
        return INSTANCE;
    }
}

public final class SpanishFrenchDictionary extends Dictionary {

    private final SpanishFrenchDictionary INSTANCE = 
                                        new SpanishFrenchDictionary();

    private SpanishFrenchDictionary() {

    }

    public static SpanishFrenchDictionary getInstance() {
        return INSTANCE;
    }
}

Услуга перевода

Услуга перевода - слой услуги. В этот класс ты поручишь ему перевести текст и он возьмется за то, чтобы посылать переводить это внутри.

public class TranslateService {

    public String translate(String text, Language lang) {
        Translater translater = null;
        Dictionary dictionary = null;

        if(lang == Language.ENGLISH) {
            translater = new SpanishEnglishTranslater();
            dictionary = SpanishEnglishDictionary.getInstance();
        }
        if(lang == Language.FRENCH) {
            translater = new SpanishFrenchTranslater();
            dictionary = SpanishFrenchDictionary.getInstance();
        }
        return translater.translate(text, dictionary);
    }
}

Графический интерфейс пользователя

Простой пример графического интерфейса пользователя. У него есть textarea, где пишется текст, и я сгибаю где elije язык, который переведя. Результат появляется в другом textarea вывода.

public class MainWindow extends JFrame {

    private JTextArea txtInput;
    private JTextArea txtOutput;
    private JComboBox<String> cboTargetLang;
    private JButton actionBtn;

    public MainWindow() {
        super("TinyTraductor");
        setLayout(null);

        txtInput = new JTextArea();
        txtOutput = new JTextArea();
        cboTargetLang = new JComboBox<>();
        actionBtn = new JButton();

        cboTargetLang.addItem("Inglés");
        cboTargetLang.addItem("Francés");
        cboTargetLang.setBounds(10, 15, 95, 25);

        actionBtn.setText("Traducir");
        actionBtn.setBounds(165, 15, 95, 25);
        actionBtn.addActionListener((ActionEvent e) -> {
            translate();
        });

        txtInput.setBounds(10, 50, 250, 60);
        txtInput.setLineWrap(true);

        txtOutput.setBounds(10, 120, 250, 60);
        txtOutput.setLineWrap(true);
        txtOutput.setEditable(false);

        this.add(cboTargetLang);
        this.add(actionBtn);
        this.add(txtInput);
        this.add(txtOutput);

        this.setSize(270, 220);
        this.setVisible(true);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void translate() {
        TranslateService service = new TranslateService();
        String inputText = txtInput.getText();
        String translation = "";
        String lang = cboTargetLang.getSelectedItem().toString();

        if(lang.equals("Inglés")) {
            translation = service.translate(inputText, Language.ENGLISH);
        }
        if(lang.equals("Francés")) {
            translation = service.translate(inputText, Language.FRENCH);
        }
        txtOutput.setText(translation);
    }
}

Если ты сосредотачиваешься на методе translate, мы получаем изогнутый, какой язык был выбран, чтобы переводить, и мы получаем перевод посредством услуги. Language одинокий enum с 2 типами стоимости: INGLÉS и FRANCÉS.

Результат

Screenshot

Очевидно этот маленький пример убегает во многие детали, как слова с несколькими signficados, может быть, вместо Map<String, String> он должен бы быть Map<String, List<String>>, также спряжения, и т.д., которые являются гораздо более сложными деталями.

1
ответ дан 24.11.2019, 14:42
  • 1
    Dir и # 237; который не быть должным, и # 237; схвати вынуждать использование patr и # 243; n singleton в этом случае. Для того, чтобы скажи себе, и # 241; или же м и # 225; s гибкая проволока вместо того, чтобы создавать твой собственный singleton быть и # 237; чтобы лучше определять один public enum Dictionaries extends Dictionary и каждый ввод (который уже является singleton во времени compilaci и # 243; n и гарантированный JVM из-за ClassLoader) он - переводчик из-за s и # 237; только. Таким образом ты можешь удалять слово static из Map, определенный в Dictionary и двигать м и # 233; совсем translate в enum вместо того, чтобы это иметь в TranslateService. –  23.03.2016, 06:54
  • 2
    Также, он позволяет тебе иметь меньше классов и реализовывать работу способствуя composici и # 243; n на наследстве. –  23.03.2016, 06:54

Теги

Похожие вопросы