2013-04-06 75 views
0

我在GUI和java新,我曾与actionPerformed方法的一个问题,当我试图写为这个问题的代码:GUI类(JTextField中-的JTextArea)

  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

一旦你找到了正确的电影你需要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

+0

它的工作!!!非常感谢你的帮助 – user2252700 2013-04-06 19:13:06

相关问题