检查JtextField是否不等于已保存的数组

时间:2014-08-05 04:36:17

标签: java arrays swing textarea equals

嘿,伙计我是Java的新手,并于7月开始介绍Java类。

我目前正在开发一个项目,它是一个带数组的翻译器。主applet显示10个英文单词,当输入JTextField时输出该作品的西班牙语翻译。反之亦然。该程序还显示与该单词相关的图片。

该程序在这种情况下完成,我目前唯一缺少的部分是,如果用户输入任何其他单词而不是20个给定单词(10个西班牙语和10个英语单词)JTextArea,其中显示翻译应该显示"那个词不在字典中#34;。

我在创建显示此错误消息的ELSE语句时遇到问题。这是完整的代码。我不知道如何做到这一点,例如

if (textFieldWord.!equals(englishWords[english])){
translate.setText("That word is not in the Dictionary");}

这是完整的代码 - - - -

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

public class DictionaryArrays extends JApplet implements ActionListener{
String[] spanishWords =   {"biblioteca","reloj",
"alarma", "volcan", "ventana", 
"autobus", "raton", "lago", "vaca", "encendedor"};
String[] englishWords =  {"library", "clock", "alarm", 
"volcano",  "window", "bus", "rat",
"lake","cow","lighter"};
String textFieldWord;
Image[] photos;
ImageIcon icon;
ImageIcon icontwo;
JButton getTranslation;
JTextField entry; 
JLabel imageviewer;
TextArea translate;     
static int defaultX = 10;
static int defaultY = 10;
static int defaultW = 780;
static int defaultH = 50;

public void init() {

  photos = new Image[10];
  photos[0] = getImage(getCodeBase(), "library.jpg");
  photos[1] = getImage(getCodeBase(), "clock.jpg");
  photos[2] = getImage(getCodeBase(), "alarm.jpg");
  photos[3] = getImage(getCodeBase(), "volcano.jpg");
  photos[4] = getImage(getCodeBase(), "window.jpg");
  photos[5] = getImage(getCodeBase(), "bus.jpg");
  photos[6] = getImage(getCodeBase(), "rat.jpg");
  photos[7] = getImage(getCodeBase(), "lake.jpg");
  photos[8] = getImage(getCodeBase(), "cow.jpg");
  photos[9] = getImage(getCodeBase(), "lighter.jpg");
  final JPanel outer = new JPanel(new BorderLayout());
  JPanel inner = new JPanel(new BorderLayout());
  JPanel viewer = new JPanel(new BorderLayout());
  JPanel visualviewer = new JPanel(new BorderLayout());
  // here is the main component we want to see
  // when the outer panel is added to the null layout
  //JButton toSpanish = new JButton("English to Spanish");
  //JButton toEnglish = new JButton("Spanish to English");
  final JLabel list = new JLabel("<HTML><FONT COLOR=RED>English</FONT> - library, clock, alarm, volcano, window, bus, rat, lake, cow, lighter"
    +"<BR><FONT COLOR=RED>Spanish</FONT> - biblioteca, reloj, alarma, volcan, ventana, autobus, raton, lago, vaca, encendedor<BR>");
  translate = new TextArea("Your translation will show here");
  imageviewer = new JLabel(icon);
  viewer.add("West",translate);
  visualviewer.add("East",imageviewer);
  inner.add("Center",list);     
  //inner.add("West",toSpanish);
  //inner.add("East", toEnglish);
  outer.add("Center", inner);
  JPanel c = (JPanel)getContentPane();
  final JPanel nullLayoutPanel = new JPanel();
  nullLayoutPanel.setLayout(null);
  c.add("Center", nullLayoutPanel);
  // set the bounds of the panels manually
  nullLayoutPanel.add(outer);
  nullLayoutPanel.add(viewer);
  nullLayoutPanel.add(visualviewer);
  outer.setBounds(defaultX, defaultY, defaultW, defaultH);
  viewer.setBounds(20, 75, 300, 300);
  visualviewer.setBounds(485, 75, 300, 300);
  JPanel controlPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
  entry = new JTextField("Enter English or Spanish word to translate here");
  entry.addActionListener(this);
  entry.addMouseListener(new MouseAdapter(){
        @Override
        public void mouseClicked(MouseEvent e){
            entry.setText("");
            }});
  getTranslation = new JButton("Translate");
  getTranslation.addActionListener(this);
  controlPanel.add(entry);
  controlPanel.add(getTranslation);
  c.add("South", controlPanel);
  viewer.setBackground(Color.blue);
  controlPanel.setBackground(Color.red);
  inner.setBackground(Color.yellow);
  visualviewer.setBackground(Color.black);
  outer.setBackground(Color.black);
  }

public void paint(Graphics g) {
    super.paint(g);



}
    public void actionPerformed (ActionEvent ae){
        if(ae.getSource()==getTranslation){
            textFieldWord=(entry.getText().toLowerCase());

            for (int english = 0; english < spanishWords.length; english++){
                if (textFieldWord.equals(englishWords[english])){
                translate.setText(spanishWords[english]);
                icon= new ImageIcon(photos[english]);
                imageviewer.setIcon(icon);
                break;
                }
                }
            for (int spanish = 0; spanish < englishWords.length; spanish++){
                if (textFieldWord.equals(spanishWords[spanish])){
                translate.setText(englishWords[spanish]);
                icontwo= new ImageIcon(photos[spanish]);
                imageviewer.setIcon(icontwo);
                break;
                }
                }   


    }
 }
}

任何帮助都会受到赞赏。如果顶部段落是TLDR。我试图让它在JTextField(条目)中除了10个英语单词和10个西班牙语单词之外输入任何其他单词将输出错误信息&#34;该单词不在词典中#34;在TextArea(翻译)

1 个答案:

答案 0 :(得分:1)

这显然是错误的......

if (textFieldWord.!equals(englishWords[english])){

应该是......

if (!textFieldWord.equals(englishWords[english])){

尝试并以这种方式考虑,String#equals返回boolean,您想要反转此方法调用的结果,它将与使用类似的东西相同...

boolean doesEqual = textFieldWord.equals(englishWords[english]);
if (!doesEqual) {...

您需要评估方法调用的结果,但是为了进行该调用,语法必须为[object].[method],因此,为了反转该值,您必须先完成方法调用,然后将修饰符应用于它...... ! ([object].[method])

<强>更新...

现在说了这些,让我们从不同的角度来看问题......

您需要找到匹配的单词,为了做到这一点,在更糟糕的情况下,您必须搜索整个数组。在您搜索整个阵列之前,您不知道是否存在匹配。

这意味着我们可以使用单独的if-else语句来管理输出的更新,例如......

String translatedWord = null;
int foundIndex = -1;
for (int english = 0; english < spanishWords.length; english++){
    if (textFieldWord.equals(englishWords[english])){
        translatedWord = englishWords[english];
        foundIndex = english;
        break;
    }
}

if (translatedWord != null) {
    translate.setText(translatedWord);
    icon= new ImageIcon(photos[foundIndex]);
    imageviewer.setIcon(icon);
} else {
    translate.setText("That word is not in the Dictionary");
}

translatedWord = null;
for (int spanish = 0; spanish < englishWords.length; spanish++){
    if (textFieldWord.equals(spanishWords[spanish])){
        translatedWord = englishWords[english];
        foundIndex = spanish;
        break;
    }
}   

if (translatedWord != null) {
    translate.setText(translatedWord);
    icontwo= new ImageIcon(photos[foundIndex]);
    imageviewer.setIcon(icontwo);
} else {
    translate.setText("That word is not in the Dictionary");
}

基本上,当它在任一阵列中找到匹配时,所有这一切都将translatedWord设置为非null值。在此,您希望显示结果,否则您希望显示错误消息...

同样,您可以将当前方法与上述方法合并,因此当您找到工作时,更新输出,还要检查translatedWord变量的状态,如果它是{{,则显示错误消息1}} ...

null

<强>更新

好的,你有一个逻辑问题。你永远不确定你要转向的方向。

如果将工作翻译成英文

,以下内容基本上不会改变后续工作
String translatedWord = null;
for (int english = 0; english < spanishWords.length; english++){
    if (textFieldWord.equals(englishWords[english])){
        translatedWord = spanishWords[english];
        translate.setText(translatedWord);
        icon= new ImageIcon(photos[english]);
        imageviewer.setIcon(icon);
        break;
    }
}

if (translatedWord == null) {
    translate.setText("That word is not in the Dictionary");
}

translatedWord = null;
for (int spanish = 0; spanish < englishWords.length; spanish++){
    if (textFieldWord.equals(spanishWords[spanish])){
        translatedWord = englishWords[spanish];
        translate.setText(translatedWord);
        icontwo= new ImageIcon(photos[spanish]);
        imageviewer.setIcon(icontwo);
        break;
    }
}   

if (translatedWord == null) {
    translate.setText("That word is not in the Dictionary");
}

现在,我建议您将public void actionPerformed(ActionEvent ae) { if (ae.getSource() == getTranslation) { textFieldWord = (entry.getText().toLowerCase()); translate.setText(null); String translatedWord = null; for (int english = 0; english < spanishWords.length; english++) { if (textFieldWord.equals(englishWords[english])) { translatedWord = spanishWords[english]; translate.append(translatedWord + "\n"); icon = new ImageIcon(photos[english]); imageviewer.setIcon(icon); break; } } if (translatedWord == null) { for (int spanish = 0; spanish < englishWords.length; spanish++) { if (textFieldWord.equals(spanishWords[spanish])) { translatedWord = englishWords[spanish]; translate.append(translatedWord + "\n"); icontwo = new ImageIcon(photos[spanish]); imageviewer.setIcon(icontwo); break; } } } if (translatedWord == null) { translate.append("A Spanish-English match is not in the Dictionary\n"); } } } 替换为TextArea,但您需要将其换成JTextArea

JScrollPane

避免使用translate = new JTextArea("Your translation will show here"); viewer.add("West", new JScrollPane(translate)); 布局,像素完美布局是现代ui设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正

基本上,由于这个原因,尝试使用真的很痛苦......