GUI类(JTextField-JTextArea)

时间:2013-04-06 18:31:37

标签: java swing for-loop jtextfield jtextarea

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

  1. 使用下面显示的帧布局,编写一个程序,搜索在文本字段中输入标题的电影。当用户按下SEARCH按钮或按ENTER键时,电影的信息(标题,年份和流派)将显示在文本区域中。如果未找到影片,则在文本区域中显示一条消息,指示此影片不存在。使用数组存储多部电影的信息。
  2. 如果有人解释我怎么能让这段代码正常工作,我真的很感激 我的尝试:

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

1 个答案:

答案 0 :(得分:4)

找到正确的电影后,您需要break

同时使用Movie#toString而不是当前toString的{​​{1}}表示。请勿将搜索范围仅限于前3部电影,请使用JFrame作为搜索的上限。为了提高效率,任何组件更新都应在处理完循环之后进行。

movies.length

除此之外:使用Java命名约定来区分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()); } 等类。