如何让JButton激活compareTo函数?

时间:2016-06-21 23:02:10

标签: java jbutton listener compareto windowbuilder

这有点令人尴尬。我有一个我打算在JButton上使用的compareTo函数,所以当用户按下它时,他们可以看到哪个是排名最高的对象。我已经有了JButton的Listener类,但我不知道如何让Listener使用compareTo函数,因为它需要两个参数。

这是我的compareTo函数:

link

这是Listener类中的actionPerformed函数:

public int compareTo(Film film1, Film film2) {
    if (film1.getFinalScore() < film2.getFinalScore()) return -1;
    if (film1.getFinalScore() > film2.getFinalScore()) return 1;
    return 0;

}

自动更正建议将参数设置为null以使其起作用,但它显然从未像自动修正那样简单。

那么,如何让Listener使用我的所有对象来执行compareTo函数,从最高到最低列出它们?

提前致谢!

1 个答案:

答案 0 :(得分:2)

由于您需要将2部影片进行比较,您可以在Film Class中执行此操作,方法是实施Comparable<Film>,然后在课程中实施compareTo方法。

之后,将您的电影放在任何collection ArrayList,然后只需拨打Collections.max(films)即可获取列表中的最大电影对象。

这是一个用于演示的电影课程:

public class Film implements Comparable<Film>{
  int finalScore ;

  public Film(int finalScore){
      this.finalScore = finalScore;
  }

  public int getFinalScore(){
      return this.finalScore;
  }

  @Override
  public int compareTo(Film film2) {
      if (this.getFinalScore() < film2.getFinalScore()) return -1;
      if (this.getFinalScore() > film2.getFinalScore()) return 1;
      return 0;
  }
}

这是主要的:

public static void main(String[] args) {
        ArrayList<Film> films = new ArrayList<>();
        films.add(new Film(100));
        films.add(new Film(400));
        films.add(new Film(200));
        films.add(new Film(300));
        System.out.println(Collections.max(films).getFinalScore());//prints 400     
    }

所以你的actionPerformed就像这样

@Override
public void actionPerformed(ActionEvent e) {
    Film maxFilm = Collections.max(films);
    //then use maxFilm object to do anything you need

}