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

JAVA:ActionListener и наследование полей. Помощь студенту)

08.10.2012, 03:26. Показов 3498. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! У меня такое задание: нужно написать программу в среде Eclipse таким образом, чтобы вся обработка событий (нажатие клавиши, кнопки на форме) находилась в одном классе, а вся работа с интерфейсом - в другом. Чтобы объяснить проблему, написал простенькую программу Теst: вот она.

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.*;
public class Ecouter extends Fenetre implements ActionListener {    
public void actionPerformed(ActionEvent e) {        
    Fenetre.monButton1.setName("name");     
}
}
import javax.swing.*;
import java.awt.*;
public class Fenetre {
    public JButton monButton1;
    public static void main(String [] args)
    {
        Fenetre InterfaceGraphique = new Fenetre();
        InterfaceGraphique.dessine();   
    }
    public void dessine()
    {
        JFrame fenetre = new JFrame ("Exemple d'interface");
        JButton monButton1 = new JButton("Bouton1");
        monButton1.addActionListener(new Ecouter());
        fenetre.getContentPane().add(monButton1);
        fenetre.pack();
        fenetre.setVisible(true);
    }
}
Смысл программы в том, что при нажатии кнопки на форме, название кнопки должно поменятся, но вместо этого программа зависает. Возможная проблема в том, что я не правильно использую механизмы наследования: extends Fenetre, но без этого я не знаю, как получить доступ из одного класса к полям другого класса, так, чтобы можно было бы их изменять. Заранее спасибо за ответы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.10.2012, 03:26
Ответы с готовыми решениями:

Помощь с задачами студенту
Здравствуйте, помогите пожалуйста мне -студенту 1 курса, решить задачи в билдере С++ !! (ЗАДАЧИ в прикрепленном файле), по вопросам и...

Укажите верный путь студенту! Java или C#
Много уже создано холиварных тем по этому поводу, но моих мучений это не умоляет... Склоняюсь к java, но у нас в городе,...

Наследование С# , наследование полей
В классе есть приватное ПОЛЕ . Мне нужно использовать его в классе потомке . Можно это не сделать не делая поле публичным .

2
 Аватар для Svoboda
70 / 70 / 17
Регистрация: 09.08.2011
Сообщений: 115
Записей в блоге: 3
08.10.2012, 11:24
У Вас много ошибок. Я Ваш код исправил немного.

1.Все поля классов желательно по возможности делать приватными.
2. Не нужно внутри класса Fenetre создавать объект этого же класса, Вам достаточно вызвать метод.
dessine(), который, кстати, нужно сделать статическим.
3. Теперь про слушатель.. Во-первых, не нужно его наследовать от Fenetre. Передать кнопку в класс слушателя можно гораздо проще (п. 4)
4. Раз слушатель будет в отдельном классе, то ему придется каким-нибудь образом передать кнопку нашу, чтобы работать с её текстовой меткой уже внутри слушателя. Как вариант - создаем конструктор с передаваемым параметром типа JButton, который в конструкторе запишем в поле button класса Ecouter.
5. getName() - не позволит получить метку на кнопке, для этого нужен getText()

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
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
 
public class Fenetre {
    private JButton monButton1; // private
    public static void main(String [] args)
    {
        //Fenetre InterfaceGraphique = new Fenetre();  объект своего же класса?
        dessine();   
    }
    static void dessine() // static
    {
        JFrame fenetre = new JFrame ("Exemple d'interface");
        JButton monButton1 = new JButton("Bouton 1");
        fenetre.getContentPane().add(monButton1);
        //Создадим объект слушателя, в который передадим кнопку
        Ecouter ectr = new Ecouter(monButton1); 
        monButton1.addActionListener(ectr);
        fenetre.pack();
        fenetre.setVisible(true);
    }
}
 
//Не надо наследовать от Fenetre!!!
class Ecouter implements ActionListener {  
    private JButton button;
    public Ecouter(JButton b){
        button = b;
    }
    public void actionPerformed(ActionEvent e) { 
        // getText() - получаем надпись на кнопке
        if(button.getText().equals("Bouton 1")){
            button.setText("Bouton 2");
        }else{
            button.setText("Bouton 1");
        }
    }
}
2
0 / 0 / 1
Регистрация: 19.11.2011
Сообщений: 26
10.10.2012, 23:04  [ТС]
Большое спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2012, 23:04
Помогаю со студенческими работами здесь

Наследование полей
Есть класс, например, Parent с приват-полем х. Есть наследник, например, Child. Так вот Child наследует поле х. Как к нему обращаться в...

Наследование полей
Здрасьте! создаю ответ на док с MakeResponse чтоб приписать в поля дочки пишу следующее fmain = uidoc.FieldGetText(...

Наследование статических полей
Вопрос такой: может ли производный класс наследовать поля родительского класса с модификатором static?

Наследование и значения полей по умолчанию
После объявления класса Base создать такой класс Derived, унаследованный от Base, чтобы его field1 по умолчанию имело значение...

Наследование форматирования полей в подчиненных таблицах
Здравствуйте. Столкнулся с такой проблемой в Access 2003. К примеру, есть база, со следующими таблицами (ключевое поле "код" не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru