2016-06-21 6 views
0

Это немного неловко. У меня есть функция compareTo, которую я намереваюсь использовать в JButton, поэтому, когда пользователь нажимает на нее, они могут видеть, что является самым высоким ранжированным объектом. У меня уже есть класс Listener для JButton, но я не знаю, как заставить Listener использовать функцию compareTo, потому что ему нужны два параметра.Как я могу заставить JButton активировать функцию 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; 

} 

И это функция actionPerformed в классе Слушатель:

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

} 

Авто-правильно предложил поставить параметры в нуль, чтобы заставить его работать , но это явно не так просто, как предлагает Auto-Correct.

Итак, как я могу заставить Listener выполнить функцию compareTo, используя все мои объекты, чтобы перечислить их с самого высокого на самый низкий?

Заранее благодарен!

+0

Где вы хранения список фильмов? – Ian

+0

Я храню их в классе базы данных. – JohnnyDontBeGood

+0

Вам нужно будет получить все данные из класса базы данных и пройти через него, используя compareTo – Ian

ответ

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 

} 
+0

Woah, спасибо за этот подробный ответ! Мне удалось добиться успеха! – JohnnyDontBeGood

+0

Добро пожаловать :) –