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

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

08.10.2012, 03:26. Показов 3484. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru