Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 12.09.2022
Сообщений: 32

Не могу передать переменные в implements ActionListener

12.09.2022, 19:25. Показов 801. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, просьба помочь совсем новичку (вторую неделю в джаве, лет 25 назад писал на обычном бейсике, который не VB, а обычный).

Пытаюсь создать примитивную программку, которая генерит ("бросает") 6 кубиков и считает результат (считает только дубли). При необходимости - можно перебросить некоторые кубики. При реализации через фрейм - столкнулся с проблемой: не могу передать данные в class reroll implements ActionListener.

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class ContactForm extends JFrame {
 
    JCheckBox check;
    public int dices[] = new int[6]; // результаты бросков 6 кубиков
    public boolean dicereroll[] = new boolean[6]; // требуется ли переброс i-го куба? (на true - "да")
 
    // Контактная форма с выводом результата броска 6 кубиков + результат дублей + кнопка переброса + кнопка выход
    public ContactForm(int dices[]) {
        super("Dice rolls");
        super.setBounds(300, 100, 400, 150);
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container container = super.getContentPane();
        container.setLayout(new GridLayout(4, 4, 10, 10));
 
        for (int i = 0; i < 6; i++){ // выводим чек-боксы 6 кубиков (галка - на переброс)
            check = new JCheckBox(dices[i] + "", false);
            dicereroll[i] =check.isSelected();
            container.add(check);
        }
 
// считаем результат броска (в расчёт идут только дубли)
        int res = 0;
        for (int i = 1; i < 7; i++) {
            int count = 0;
            for (int j = 0; j < dices.length; j++) {
                if (dices[j] == i) count++;
            }
            if (count > 1) res += count * i;
        }
        JLabel Result = new JLabel("You Result: " + res); // выводим результат
        container.add(Result);
 
        JButton send_button_reroll = new JButton("Reroll..."); // кнопка перебоса
        container.add(send_button_reroll);
 
        JButton send_button_exit = new JButton("Exit"); // кнопка выхода
        container.add(send_button_exit);
 
        send_button_reroll.addActionListener(new reroll()); // обработка кнопки переброса
        send_button_exit.addActionListener(new exit()); // обработка кнопки выход
    }
 
    class reroll implements ActionListener { // процедура при нажатии на "переброс"
        // ПРОБЛЕМА: dicereroll[] и dices[] здесь равны 0/false
        @Override
        public void actionPerformed(ActionEvent e) {
            for (int i = 0; i < 6; i++) {
                System.out.print(i + 1 + ") " + dicereroll[i] + " " + dices[i] + " /// ");
                if (dicereroll[i] == true) {
                    dices[i] = Dice.getRoll();
                    System.out.println("Reroll " + i + " dice, result" + dices[i]);
                }
                dicereroll[i] = false;
            }
            System.out.println();
 
            for (int i = 0; i < 6; i++) {
                check = new JCheckBox(dices[i] + "", false);
            }
        }
    }
 
    class exit implements ActionListener { // процедура при нажатии на "выход")
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    }
}


Строка
System.out.print(i + 1 + ") " + dicereroll[i] + " " + dices[i] + " /// ");
выдает буквально
1) false 0 /// 2) false 0 /// 3) false 0 /// 4) false 0 /// 5) false 0 /// 6) false 0 ///
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2022, 19:25
Ответы с готовыми решениями:

Не могу передать переменные из PHP в JS
Всем привет! Столкнулся с проблемой - надо подгрузить значения из БД в поля &lt;input&gt; HTML формы, при выборе нужного id из списка...

Не могу передать переменные во вторую форму
начал учить пхп. но не получается передавать переменные в след форму. Подскажите, как это сделать?

Не могу передать переменные из представления в контроллер
Доброго времени суток. Вопрос очень тривиальный и скорее очень глупый, но не могу никак его разрешить. Пользователь вводит данные в...

2
2 / 2 / 0
Регистрация: 12.09.2022
Сообщений: 32
13.09.2022, 06:06  [ТС]
ЗЫ: Да, причем данные, как минимум, в dices[] есть и они выводятся в форму, как-то так:
Миниатюры
Не могу передать переменные в implements ActionListener  
0
2 / 2 / 0
Регистрация: 12.09.2022
Сообщений: 32
13.09.2022, 07:44  [ТС]
В общем, пошел другим путем, как говорил В.И.Л.
Проблему решил (обработал нажатие через "send_button_reroll.addActionListener(ne w ActionListener() {" прямо в теле класса).

Но итоговый код мне не очень нравится, так как под каждый чекбокс я делал отдельный код. Фрагментарно так:

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
        // задаем 6 полей для кубиков с чек-боксом на переброс
        check1 = new JCheckBox(dices[0] + "", false);
        container.add(check1);
        check2 = new JCheckBox(dices[1] + "", false);
        container.add(check2);
        check3 = new JCheckBox(dices[2] + "", false);
        container.add(check3);
        check4 = new JCheckBox(dices[3] + "", false);
        container.add(check4);
        check5 = new JCheckBox(dices[4] + "", false);
        container.add(check5);
        check6 = new JCheckBox(dices[5] + "", false);
        container.add(check6);
...
          public void actionPerformed(ActionEvent e) { // проверяем наличие галки на переброс кубика в чекбоксах
                dicereroll[0] =check1.isSelected();
                dicereroll[1] =check2.isSelected();
                dicereroll[2] =check3.isSelected();
                dicereroll[3] =check4.isSelected();
                dicereroll[4] =check5.isSelected();
                dicereroll[5] =check6.isSelected();
 
                // реролл для кубов, имеющих заявку на переброс
                for (int i = 0; i < 6; i++) {
                    if (dicereroll[i] == true) {
                        dices[i] = Dice.getRoll();
                    }
                }
 
                // меняем текст (результат броска кубика) перед чек-боксом
                check1.setText(dices[0] + "");
                check2.setText(dices[1] + "");
                check3.setText(dices[2] + "");
                check4.setText(dices[3] + "");
                check5.setText(dices[4] + "");
                check6.setText(dices[5] + "");


Вопрос знатокам - можно ли все же реализовать чекбоксы через массив, чтобы не писать код под каждый?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.09.2022, 07:44
Помогаю со студенческими работами здесь

Как передать в ActionListener значение?
Добрый День! есть метод ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent...

Не могу справиться с ActionListener
package com.company; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Main {

Не могу использовать ActionListener для кнопки GridbagLayout
Добрый вечер, такая проблема хочу чтобы при нажатии кнопки(JButton) размещенной в интерфейсе с помощью менеджера GridbagLayout выполнялись...

Написать метод, которому можно передать переменные и передать имя массива для заполнения
Есть куча таких вот методов в одном классе( штук 9). Задача: передать их в код формы, чтобы потом вызвав класс вывести уже готовые ответы. ...

Передать две переменные в скрипт на PHP, а он должен передать их значения обратно в Unity приложение
Привет! При нажатии на кнопку должны отослаться две переменные в скрипт на PHP, а этот скрипт должен передать их значения обратно в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru