如何让 JButton 激活 compareTo 函数?

How can I make a JButton activate a compareTo function?

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

这是我的 compareTo 函数:

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

}

这是 Listener 中的 actionPerformed 函数 class:

@Override
public void actionPerformed(ActionEvent e) {
    this.cm.compareTo(null, null);

}

自动更正建议将参数设置为 null 以使其工作,但显然它从来没有像自动更正建议的那样简单。

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

提前致谢!

因为您需要将 2 部电影放在一起进行比较,您可以在 Film Class 中通过实施 Comparable<Film> 然后在 class.[=19 中实施 compareTo 方法来做到这一点=]

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

这里是演示的电影class:

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

}