Прослушивание действий на внутреннем JPanel из JFrame - PullRequest
1 голос
/ 25 августа 2010

У меня есть JFrame, в котором есть BottomPanel (класс, который я создал, расширяющий JPanel). И внутри этой JPanel находится другая JPanel под названием DicePanel (которая снова расширяет JPanel).

В DicePanel есть кнопка «Конец хода», которая при нажатии должна завершить текущий ход игроков для настольной игры, на которой основана программа. Я хочу как-то прослушать событие buttonClicked из DicePanel внутри моего JFrame.

Как мне это сделать?

Редактировать: сейчас у меня есть

for (Player p : f.playerList) {
    int diceRoll = dice.roll();
    System.out.println(p.move(diceRoll));
    System.out.println(p.getCurrentCell());
    System.out.println(diceRoll);
    f.bottomPanel.dice.setDice(dice.getDice1(), dice.getDice2());
    while (true) {
        try {
            break;
            System.out.println("Waiting");
            Thread.sleep(2000);
        } catch (Exception e) {
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 25 августа 2010

Вы можете использовать setDefaultButton(), "который будет активирован, когда событие активации, определяемое пользовательским интерфейсом (обычно ключ Ввод ), происходит в корневой панели независимо от того, активен ли он или неткнопка имеет фокус клавиатуры. "

JFrame f = new JFrame("Dice Game");
JButton b = new JButton("End Turn");
f.getRootPane().setDefaultButton(b);

Вот очень простой пример , который предлагает, как вы могли бы структурировать свою игру, чтобы избежать бесконечного цикла, не прибегая к нескольким потокам.

Кроме того, плохая идея - ловить исключение без наименьшего некоторого вывода, например, e.printStackTrace().

0 голосов
/ 25 августа 2010

Почему?

Я имею в виду, вы, вероятно, могли бы сделать это, определив кнопку в вашем JFrame и передав ее до тех пор, пока вы не поместите ее в DicePanel, но зачем вам сначала добавлять слушателя в JFrame?

...