Удаление редактирования в выражениях переключателя - PullRequest
0 голосов
/ 05 мая 2019

Я работаю над созданием калькулятора шансов в покере, у меня есть 8 игроков за столом с JComboBox с выбранным количеством игроков.То, что я хочу сделать, это «перекрасить» графический интерфейс после того, как я сделаю несколько выборов.Например, если я нажму 4 игрока, 4 игрока станут доступными для редактирования.В настоящее время это работает, но когда я выбираю 3 игроков после, игрок 4 по-прежнему доступен для редактирования.

Я попытался установить видимость, я устал, чтобы удалить панели игрока, я пытался удалить (addPlayer4), я попыталсяНесколько других странных вещей, но самое близкое, что я могу получить, - полностью удалить игрока.

addPlayer1.addActionListener((ActionEvent e) -> {
        player1.removeAll();
        player1.add(playerPanelFactory("Player1",1));
        //welcomeScreen.get
        repaint();
        validate();
    });
    addPlayer2.addActionListener((ActionEvent e) -> {
        player2.removeAll();
        player2.add(playerPanelFactory("Player2",2));
        getParent().repaint();
 //       contentPane.repaint();
        validate();
    });
    addPlayer3.addActionListener((ActionEvent e) -> {
        player3.removeAll();
        player3.add(playerPanelFactory("Player3",3));
        getParent().repaint();
//        contentPane.repaint();
        validate();
    });
    addPlayer4.addActionListener((ActionEvent e) -> {
        player4.removeAll();
        player4.add(playerPanelFactory("Player4",4));
        repaint();
        validate();
    });

.....

playerBox.addActionListener((ActionEvent e)-> {
        numberOfPlayers = playerBox.getSelectedItem().toString();
        int numPlayers = Integer.parseInt(numberOfPlayers);
        switch(numPlayers){
            case 1: 
                addPlayer1.doClick();
                break;
            case 2:
                addPlayer1.doClick();
                addPlayer2.doClick();
                break;
            case 3:
                addPlayer1.doClick();
                addPlayer2.doClick();
                addPlayer3.doClick();
                break;
            case 4:
                addPlayer1.doClick();
                addPlayer2.doClick();
                addPlayer3.doClick();
                addPlayer4.doClick();
                break;
            case 5:
                addPlayer1.doClick();
                addPlayer2.doClick();
                addPlayer3.doClick();
                addPlayer4.doClick();
                addPlayer5.doClick();
                break;
            case 6:
                addPlayer1.doClick();
                addPlayer2.doClick();
                addPlayer3.doClick();
                addPlayer4.doClick();
                addPlayer5.doClick();
                addPlayer6.doClick();
                break;
            case 7:
                addPlayer1.doClick();
                addPlayer2.doClick();
                addPlayer3.doClick();
                addPlayer4.doClick();
                addPlayer5.doClick();
                addPlayer6.doClick();
                addPlayer7.doClick();
                break;
            case 8:
                addPlayer1.doClick();
                addPlayer2.doClick();
                addPlayer3.doClick();
                addPlayer4.doClick();
                addPlayer5.doClick();
                addPlayer6.doClick();
                addPlayer7.doClick();
                addPlayer8.doClick();

                break;
            default:
                return;
        }
    });

Я не хотел связывать весь код, поскольку он содержит почти 700 строк, но я считаю, что именно здесь могут возникнуть проблемы,Цель, которую я ищу, состоит в том, чтобы панель игроков редактировалась, когда они выделены, и не редактировалась, когда она не выбрана.

https://imgur.com/a/ssgXSXW? Надеюсь, это имеет смысл

1 Ответ

0 голосов
/ 05 мая 2019

Надеюсь, эта адаптация поможет решить вашу проблему. По сути, вы добавляете количество игроков каждый раз, когда меняете счетчик, и добавляете их заново при каждом изменении, например, когда выбран 1 игрок, вы порождаете игрока 1. Затем, когда выбраны два игрока, вы снова порождаете игрока 1 и игрока 2. Возможно, добавление чека некоторых сортов, чтобы вы не воссоздали тех же игроков снова, будет хорошо, тогда вам не придется очищать игроков каждый раз, когда они добавляются, хотя это лишь незначительная мысль.

С этим предложением цель состоит в том, чтобы сравнить текущее число игроков с предыдущим числом. Если мы добавим больше игроков или останемся прежними, продолжайте как обычно и обновите наши переменные. Однако если мы удаляем одного или нескольких игроков, перед повторным розыгрышем удалите игрока между нашим текущим количеством игроков и целевым числом игроков.

Пример случая: переход от 7 игроков к 5 игрокам. Поэтому мы хотим удалить новый номер игрока (5) + 1, поэтому игрок 6. Затем зациклите и удалите последнего игрока, игрока 7. Затем перерисовайте.

Я не смог протестировать его без кода, но я надеюсь, что мой мозговой штурм поможет или что он вызывает некоторые мысли у вас или у кого-то еще :) Надеюсь, он также реализуем. Если кто-нибудь знает лучший способ сделать это, я тоже все уши и хочу узнать, где я мог пойти не так! :)

int lastNumPlayers;

/*
*   SOME CODE
*/

playerBox.addActionListener((ActionEvent e)-> {
        numberOfPlayers = playerBox.getSelectedItem().toString();
        int numPlayers = Integer.parseInt(numberOfPlayers);

        if(numPlayers >= lastNumPlayers) {
            switch(numPlayers){
                case 1: 
                    addPlayer1.doClick();
                    break;
                case 2:
                    addPlayer1.doClick();
                    addPlayer2.doClick();
                    break;
                case 3:
                    addPlayer1.doClick();
                    addPlayer2.doClick();
                    addPlayer3.doClick();
                    break;
                case 4:
                    addPlayer1.doClick();
                    addPlayer2.doClick();
                    addPlayer3.doClick();
                    addPlayer4.doClick();
                    break;
                case 5:
                    addPlayer1.doClick();
                    addPlayer2.doClick();
                    addPlayer3.doClick();
                    addPlayer4.doClick();
                    addPlayer5.doClick();
                    break;
                case 6:
                    addPlayer1.doClick();
                    addPlayer2.doClick();
                    addPlayer3.doClick();
                    addPlayer4.doClick();
                    addPlayer5.doClick();
                    addPlayer6.doClick();
                    break;
                case 7:
                    addPlayer1.doClick();
                    addPlayer2.doClick();
                    addPlayer3.doClick();
                    addPlayer4.doClick();
                    addPlayer5.doClick();
                    addPlayer6.doClick();
                    addPlayer7.doClick();
                    break;
                case 8:
                    addPlayer1.doClick();
                    addPlayer2.doClick();
                    addPlayer3.doClick();
                    addPlayer4.doClick();
                    addPlayer5.doClick();
                    addPlayer6.doClick();
                    addPlayer7.doClick();
                    addPlayer8.doClick();

                    break;
                default:
                    return;
        }

        lastNumPlayers = numPlayers;
    } else {        
        //Loop through all players between the last number and the new number
        for(int i = numPlayers + 1; i <= lastNumPlayers; i++) {
            switch(i) {
                //Lowest number of players is 1, so lowest check is at 2 (1+1 = 2)
                case 2:
                    player2.removeAll();
                    break;
                case 3: 
                    player3.removeAll();
                    break;
                case 4:
                    player4.removeAll();
                    break;
                case 5:
                    player5.removeAll();
                    break;
                case 6:
                    player6.removeAll();
                    break;
                case 7:
                    player7.removeAll();
                    break;
                case 8:
                    player8.removeAll();
            }
        }

        //After removing unused players, redraw screen
        repaint();
        lastNumPlayers = numPlayers;
    }

});
...