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

калькулятор Java подскажите где ошибка

10.06.2017, 20:03. Показов 1889. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Извините за беспокойство.
Пытался написать "калькулятор" и что бы фрэйм и слушатель были в отдельных классах, но что то ничего не происходит при проверке, то есть кнопка b1 на которую прилепил addActionListener(listener) не работает то есть добавил текстфилд который должен заполниться ответом но этого не происходит. сам листенер получен путём создания его экземпляра и проинициализирован в мэйн классе, и через метод сетЛистенер добавлен в фрэйм, и по аналогии так же проинициализированный фрэйм находится в классе листенер, то есть имеют экземпляры друг друга.
да конечно калькулятор состоит из одной кнопки и ответом должно быть введённое увеличенное число на единицу. и то что написано наверняка по нубски, на это можете не обращать внимания. главное подскажите где ошибка.
при написании аналогичного с классом фрэйм и вложенным в него листенера все работает норма.


**Основной класс:**

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.swing.*;
    public class MainCalc {
    public static void main(String[] args){
        Listener listener = new Listener();
        Frame frame = new Frame("windows self 1/33.3");
        frame.setListener(listener);
        listener.setFrame(frame);
        listener.getFrame().setVisible(true);
        listener.getFrame().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        listener.getFrame().setSize(200, 200);
        listener.getFrame().setResizable(false);
        listener.getFrame().setLocationRelativeTo(null);
 
        }
    }
**Листенер:**

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
import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JOptionPane;
 
    public class Listener implements ActionListener{
    private Frame fr = null;
    public void actionPerformed(ActionEvent e){
         try {
             if(e.getSource() == fr.b1){
                 int i = Integer.parseInt(fr.tm.getText());
                 i++;
                 String a = ""+i;
                 fr.lm.setText(a);
             }
         } catch (Exception e1) {
             JOptionPane.showMessageDialog(null, "Enter NUMBER");
         }
     }
     public Frame getFrame(){
         return fr;
     }
     public void setFrame(Frame fr) {
         this.fr = fr;
     }
    }
**Класс фрэйм:**

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
import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Frame extends JFrame{
    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b0, bm, bp, bdot, beq, bmul, bdiv;
    JTextField tm, tme1, tme2;
    JLabel lm;
    private Listener listener = null;
    public void setListener(Listener listener){
        this.listener = listener;
    }
    public Listener getListener(){
        return listener;
    }
    public Frame(String s){
        super(s);
        setLayout(new FlowLayout());
        b1 = new JButton("unit");
        tm = new JTextField(10);
        lm = new JLabel("text here");
        add(b1); add(tm); add(lm);
        b1.addActionListener(listener);
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2017, 20:03
Ответы с готовыми решениями:

Препод говорит где - то ошибка в синтаксисе. Сам код взят из "жефри Рихтер - Создание эффективных WIN32 приложений" Пожалуйста, подскажите где ошибка!
// получаем код ошибки DWORD dwError = GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE); HLOCAL hlocal = NULL; // буфер для строки с...

где ошибка??? Калькулятор.
где я опять накосячила??? <html> <head> <title> ееееееееееее!!!! </title> <script> function calc(v1,v2,ch) { if...

Подскажите, где может быть ошибка (структуры)? (скорее всего где-то амперсенд нужен, все вроде проверил)
написать универсальный тип, который представляет точку на плоскости в координатах (х, у) и в полярных координатах. Написать функцию для...

4
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
10.06.2017, 22:19
Лучший ответ Сообщение было отмечено Sergen54 как решение

Решение

Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Frame extends JFrame {
    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b0, bm, bp, bdot, beq, bmul, bdiv;
    JTextField tm, tme1, tme2;
    JLabel lm;
 
 
    public Frame(String s) {
        super(s);
        setLayout(new FlowLayout());
        b1 = new JButton("unit");
        b1.addActionListener(new Listener(this));
        tm = new JTextField(10);
        lm = new JLabel("text here");
        add(b1);
        add(tm);
        add(lm);
 
    }
}
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
public class Listener implements ActionListener {
    private Frame fr = null;
 
    public Listener(Frame fr) {
        this.fr = fr;
    }
 
    public void actionPerformed(ActionEvent e) {
        JButton jButton = (JButton) e.getSource();
        try {
            if (jButton == fr.b1) {
                int i = Integer.parseInt(fr.tm.getText());
                i++;
                String a = "" + i;
                fr.tm.setText(a);
            }
        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, "Enter NUMBER");
        }
    }
 
    public Frame getFrame() {
        return fr;
    }
 
    public void setFrame(Frame fr) {
        this.fr = fr;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
public class MainCalc {
    public static void main(String[] args) {
        Frame frame = new Frame("windows self 1/33.3");
 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setVisible(true);
 
 
    }
}

Поправил код, хотя на самом деле гораздо удобнее работать с Listener как с внутренним классом.
Кликните здесь для просмотра всего текста
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
public class Frame extends JFrame {
    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b0, bm, bp, bdot, beq, bmul, bdiv;
    JTextField tm, tme1, tme2;
    JLabel lm;
 
    private class Listener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JButton jButton = (JButton) e.getSource();
            try {
                if (jButton == b1) {
                    int i = Integer.parseInt(tm.getText());
                    i++;
                    String a = "" + i;
                    tm.setText(a);
                }
            } catch (Exception e1) {
                JOptionPane.showMessageDialog(null, "Enter NUMBER");
            }
        }
 
    }
 
    public Frame(String s) {
        super(s);
        setLayout(new FlowLayout());
        b1 = new JButton("unit");
        b1.addActionListener(new Listener());
        tm = new JTextField(10);
        lm = new JLabel("text here");
        add(b1);
        add(tm);
        add(lm);
 
    }
}

В общем смотрите.
1
1 / 1 / 0
Регистрация: 07.04.2017
Сообщений: 8
11.06.2017, 14:50  [ТС]
спасибо за помощь

Добавлено через 16 часов 1 минуту
Цитата Сообщение от v777779 Посмотреть сообщение
b1.addActionListener(new Listener(this));
пожалучйта опишите что делает именно
Java
1
new Listener (this)
первый раз такое вижу. ну что бы не показаться нубом и по логике вещей создаётся и инициализируется текущий листенер для класса фрейм, то есть то же самое что и
Java
1
Listener listener = new Listener();
но в вашем случае не будет ошибки переполнения стека?
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
11.06.2017, 15:11
Лучший ответ Сообщение было отмечено Sergen54 как решение

Решение

Цитата Сообщение от Sergen54 Посмотреть сообщение
пожалучйта опишите что делает именно
Так как Вы используете внешний public class Listener по отношению к Frame но при этом хотите иметь доступ к его
атрибутам b1 и tm при инициализации listener в конструктор передается ссылка на экземпляр класса Frame.
То есть Frame создает экземпляр Listener и передает ему в конструктор Listener() ссылку на себя, чтобы тот (listener) знал как обратиться к атрибутам Frame b1 и tm.
Чтобы этот путь не использовать, я и предложил сделать Listener внутренним классом для Frame, тогда экземпляр listener по умолчанию получает доступ к атрибутам внешнего класса.
Цитата Сообщение от Sergen54 Посмотреть сообщение
но в вашем случае не будет ошибки переполнения стека?
Откуда ему взяться, если Listener внешний класс по отношению к Frame и никак с ним не связан.
Выше дано два примера класса Listener один как внешний класс, другой как внутренний. И они как бы разные...
1
1 / 1 / 0
Регистрация: 07.04.2017
Сообщений: 8
11.06.2017, 15:28  [ТС]
Цитата Сообщение от v777779 Посмотреть сообщение
Откуда ему взяться, если Listener внешний класс по отношению к Frame и никак с ним не связан.
да это Я по неопытности решил сделать так что бы листенер и фрейм взаимо создавали и взаимо инициализировали у себя в классах друг друга и получил такую ошибку. Вы предложили хорошую штуку, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2017, 15:28
Помогаю со студенческими работами здесь

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

Калькулятор. Некорректная работа. Где ошибка?
К примеру 1+1 считает правильно, а 1+1+1 - не правильно. unit Unit2; interface uses Windows, Messages, SysUtils,...

Уважаемые подскажите где можно скачать Java Decompiler 1.0 ?
Уважаемые подскажите где можно скачать Java Decompiler 1.0 ? Спасибо всем кто ответит !

Простой консольный калькулятор - не пойму, где ошибка
#include <stdio.h> int main() { float num1,num2,res,moreCalc; char operation; ...

Здравствуйте ! Подскажите пожалуйста где можно скачать язык программирования Java ?
Заранее спасибо!


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
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