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なく使用します。検索を最初の 3 つの映画だけに限定しないでください。検索の上限として使用してください。効率を高めるために、コンポーネントの更新は、ループが処理された後に行う必要があります。toStringJFramemovies.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 に答える