К сожалению, у меня есть ошибка, над которой я работаю в течение 1 полного дня, и хотя я знаю, что есть способы обойти ее, я очень рад узнать, где моя логика идет не так, как надо.
Теперь моя программа о матче двух команд шахматистов.Он прогнозирует оценки в зависимости от настроек игрока, выбранных тренером (пользователем).* (дополнительная информация ниже моего вопроса)
Поэтому я сначала спрашиваю пользователя, какие игроки входят в его команду.Конечно, я хочу, чтобы эта информация «PlayerList» оставалась постоянной (и ошибка, о которой я говорил, заключается в том, что она таинственным образом не существует)
Поэтому я сделал Gui, который выскакивает на всех досках, с игроками в порядке, чтоПользователь отправил их в программу.Затем всякий раз, когда он нажимает на одну из кнопок, в сценическом элементе этой кнопки должен отображаться следующий игрок (и это позволяет основной программе узнать, что на этой доске выбран другой игрок, и соответственно скорректировать прогноз, но эти задачи работают отлично).
Теперь проблема в том, что если пользователь заменил, например, Марселя на доске 2 на кого-то другого, то, когда пользователь собирается нажать кнопку на доске 3, у него больше не будет опций Марселя наего распоряжение.Поле «playerList» всех кнопок было установлено на выбранную настройку проигрывателя в основной программе, а не на исходный список, который основная программа запрашивала у пользователя в начале выполнения ...
(см. прилагаемое изображение)
Таким образом, существует некоторая действительно раздражающая зависимость между игроками, которые назначены на эти кнопки, и фактически выбранным списком игроков, который был составлен пользователем.Если я посмотрю на свой код, я не пойму, почему ...
Так что что-то не так с кнопками, которые я определил.
вот что мы получили:
Я расширил JButton, чтобы на кнопке была информация о доступных игроках в команде пользователей, например:
public class JButtonPlus extends JButton {
public Team team;
private int aantalSpelers;
final ArrayList<Player> playerList;
private Integer spelerNr;
private Integer bordNr;
public JButtonPlus(ArrayList<Player>playerList_, Integer spelernr, Integer bordnr){
playerList=playerList_;
aantalSpelers=playerList_.size();
spelerNr=spelernr;
bordNr = bordnr;
}
Итак, проблема в том, что этот окончательный ArrayList playerList не является постоянным вообще.
Он изменяется после вызова любого из actionListeners, нажав любую из других кнопок.
Это код в основной программе, который создает кнопки и добавляет actionlisteners: (примечание: это команды.get (0) относится к команде пользователя, а полевые игроки ссылаются на ArrayList, который заполняется всеми игроками, которые он отправил в программу. Метод displaySpelernr (i) добавляет имя игрока в метод setText JButtonPlus)
Box verticalBox_1 = Box.createVerticalBox();
frame.getContentPane().add(verticalBox_1);
JLabel lblNewLabel = new JLabel("opstelling thuisteam");
verticalBox_1.add(lblNewLabel);
for (int i = 0; i < teams.get(0).players.size(); i++) {
final JButtonPlus btnSpeler = new JButtonPlus(
teams.get(0).players,i, i);
btnSpeler.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
btnSpeler.displayVolgendeSpeler();
}
});
verticalBox_1.add(btnSpeler);
btnSpeler.displaySpelerNr(i);
}
метод, который вызывается в userClick, displayVolgendeSpeler похож на это
public void displayVolgendeSpeler(){
spelerNr =(spelerNr+1)%aantalSpelers;
displaySpelerNr(spelerNr);
проблема выше оператора, другие операторы касаются вычисления, которое работает так, как должно.Этот метод displaySpelerNr () выглядит как его
public void displaySpelerNr(Integer i){
setText(playerList.get(i).SpelerNaam);
, и здесь замечена ошибка: объект playerList был изменен ..
Кто-нибудь видит, почему этот предположительно постоянный источник игроков playerList изменяетсякогда нажимается кнопка?
* (дополнительная информация о фоне)В матче между двумя шахматными командами все игроки должны сыграть 1 матч против одного из игроков соперника.Как правило, игроки в команде имеют разную силу.Так, например, если у вас есть команда A с силой игрока от новичка до мастера и команда B с игроками от среднего до гроссмейстера, вы знаете, что если вы объедините игроков в группу с ростом силы, то команда A наверняка проиграет.Веселье начинается, когда Команда A пожертвует одним или двумя из своих самых слабых игроков, соединяя их с двумя сильнейшими игроками команды B. Это означает потерю двух очков, но каждый из оставшихся игроков команды A теперь будет сталкиваться с более слабым игроком.более сильного.Могут даже быть пары, так что более слабая команда победит.Моя программа пытается показать, какие пары худшие и лучшие, и выдает статистику.Конечно, было бы неплохо, если бы тренер, который мог бы использовать эту программу, действительно мог настроить этот Gui на свою желаемую команду, и вот куда вы входите, дорогой StackOverflow-champ!