0

我是 GUI 和 java 的新手,当我尝试为这个问题编写代码时,我遇到了 actionPerformed 方法的问题:

  1. 使用如下所示的帧布局,编写一个程序来搜索在文本字段中输入了标题的电影。当用户按下 SEARCH 按钮或按下 ENTER 键时,电影的信息(标题、年份和类型)将显示在文本区域中。如果未找到该电影,则在文本区域中显示一条消息,指示该电影不存在。使用数组存储多部电影的信息。

如果有人解释如何让这段代码正常工作,我将不胜感激。
我的尝试:

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

class movie {
    public String title;
    public String year;
    public String genre;
    public movie(String t, String y, String g) {
        title = t;
        year = y;
        genre = g;
    }
    public String toString() {
        return "TITLE: " + title + "\nYEAR: " + year + "\nGENRE: " + genre;
    }
}

public class searchMovieFrame extends JFrame implements ActionListener {
    public movie m1 = new movie("Iron Man", "2008", "Action,Adventure");
    public movie m2 = new movie("Iron Man", "2010", "Action,Adventure");
    public movie m3 = new movie("Total Recall", "2012", "Action,Adventure");
    public movie[] movies = {
        m1, m2, m3
    };

    private static final int width = 300;
    private static final int height = 200;
    private static final int x = 360;
    private static final int y = 150;
    private JButton search;
    private JTextField input;
    private JTextArea output;
    private JLabel message;

    public searchMovieFrame() {
        Container contentPane = getContentPane();
        setSize(width, height);
        setResizable(false);
        setTitle("Search Movie Frame");
        setLocation(x, y);
        contentPane.setLayout(new FlowLayout(FlowLayout.LEFT));
        message = new JLabel();
        message.setText("Enter the movie title please");
        message.setSize(150, 25);
        contentPane.add(message);
        input = new JTextField();
        input.setColumns(15);
        contentPane.add(input);
        input.addActionListener(this);
        search = new JButton("Search");
        contentPane.add(search);
        search.addActionListener(this);
        output = new JTextArea();
        output.setColumns(23);
        output.setRows(5);
        output.setEditable(false);
        contentPane.add(output);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent event) {
        for (int i = 0; i < 3; i++)
        if (input.getText().equals(movies[i].title)) output.setText(toString());
        else output.setText("THAT MOVIE IS NOT AVAILABLE");
    }

    public static void main(String[] args) {
        searchMovieFrame frame = new searchMovieFrame();
        frame.setVisible(true);
    }
}
4

1 回答 1

4

break一旦找到正确的电影,您就需要这样做。

也使用Movie#toString而不是toString当前的表示JFrame。不要将搜索限制在前 3 部电影,将movies.length其用作搜索的上限。为提高效率,任何组件更新都应在处理完循环后进行。

Movie searchMovie = null;
for (int i = 0; i < movies.length; i++) {
   if (input.getText().equals(movies[i].title)) {
      searchMovie = movies[i];
      break;
   }
}

if (searchMovie == null) {
   output.setText("THAT MOVIE IS NOT AVAILABLE");
} else {
   output.setText(searchMovie.toString());
}

另外:使用 Java 命名约定来区分类,例如Movie.

于 2013-04-06T18:42:41.463 回答