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

События для нескольких кнопок

05.11.2015, 14:45. Показов 3279. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь потихоньку осваивать работу с событиями. Вот в чем казус: когда нажимаю кнопку "Change Text" изменяется и текст и цвет круга, хотя должен только текст. Подскажите где ошибка, или где я чего-то недопонимаю.

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
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class SimpleGui3C {
    JFrame frame;
    JLabel label;
 
    public static void main (String[] args) {
        SimpleGui3C simpleGui3C = new SimpleGui3C();
        simpleGui3C.go();
    }
 
    public void go () {
        frame = new JFrame();
        SimleGuiPanel simleGuiPanel = new SimleGuiPanel();
 
        JButton buttonColor = new JButton("Color Change");
        buttonColor.addActionListener(new ColorListener());
 
        JButton buttonLabel = new JButton("Change Text");
        buttonLabel.addActionListener(new LabelListener());
 
        label = new JLabel("HelloWorld");
 
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
 
        frame.getContentPane().add(BorderLayout.CENTER, simleGuiPanel);
        frame.getContentPane().add(BorderLayout.SOUTH, buttonColor);
        frame.getContentPane().add(BorderLayout.WEST, buttonLabel);
        frame.getContentPane().add(BorderLayout.EAST, label);
 
    }
 
 
    class ColorListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            frame.repaint();
        }
    }
 
    class LabelListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            label.setText("Changed");
        }
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.swing.*;
import java.awt.*;
 
public class SimleGuiPanel extends JPanel {
    public void paintComponent(Graphics graphics) {
        int red = (int) (Math.random() * 255);
        int green = (int) (Math.random() * 255);
        int blue = (int) (Math.random() * 255);
 
        Color color = new Color(red, green, blue);
 
        graphics.setColor(color);
        graphics.fillOval(70,70, 100,100);
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2015, 14:45
Ответы с готовыми решениями:

Создание нескольких кнопок с использованием цикла
нужно создать 9 кнопок, причем у каждой свой цвет и подпись ее номера с нумерацией легко: for(int i = 0; i < 9; i++) { ...

Как вызвать обработчик события для двух кнопок?
Не могу понять как вызвать обработчик есть у Меня код private EventHandler<ActionEvent> EvHandObjSave; ...

Обработка нажатия одной из нескольких одинаковых кнопок
Добрый день. Ребята, подскажите, пожалуйста, каким образом можно реализовать данную ситуацию в javaFx. Есть проект на javaFX. Есть...

4
 Аватар для Alradalion
132 / 126 / 85
Регистрация: 13.09.2013
Сообщений: 485
05.11.2015, 15:19
Могу, конечно, ошибаться, но каждый раз, когда у вас происходит изменение Label (увеличение занимаемого им места), панель/фрейм перерисовывается, отсюда и изменение цвета.
0
1 / 1 / 2
Регистрация: 02.11.2015
Сообщений: 13
05.11.2015, 17:13  [ТС]
Alradalion, А как можно это исправить? У меня никаких идей на этот счет.
0
 Аватар для Alradalion
132 / 126 / 85
Регистрация: 13.09.2013
Сообщений: 485
05.11.2015, 17:17
Возможно, стоит на фрейм добавить панель и на ней отрисовывать окружность.
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
05.11.2015, 17:47
Вас не смущает тот факт что при изменении размера онка ваш круг тоже начинает дискотеку?

Добавлено через 15 минут
Я думаю надо вынести рандом из paintComponent, так как каждый раз когда он туда входит, он перегенерирует значения и цвет меняется. Думаю эти значения надо передавать в конструкторе SimleGuiPanel и перегенерировать значения в том случае, если это не обходимо.

Добавлено через 2 минуты
Что-то типа:
Кликните здесь для просмотра всего текста
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
75
76
77
78
79
80
81
82
83
84
import javax.swing.*;
 
import java.awt.*;
import java.awt.event.*;
 
public class SimpleGui3C {
    JFrame frame;
    JLabel label;
    SimleGuiPanel simleGuiPanel;
 
    public static void main(String[] args) {
        SimpleGui3C simpleGui3C = new SimpleGui3C();
        simpleGui3C.go();
    }
 
    public void go() {
        frame = new JFrame();
 
        int red = (int) (Math.random() * 255);
        int green = (int) (Math.random() * 255);
        int blue = (int) (Math.random() * 255);
        simleGuiPanel = new SimleGuiPanel(red, green, blue);
        JButton buttonColor = new JButton("Color Change");
        buttonColor.addActionListener(new ColorListener());
        JButton buttonLabel = new JButton("Change Text");
        buttonLabel.addActionListener(new LabelListener());
        label = new JLabel("HelloWorld");
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(BorderLayout.CENTER, simleGuiPanel);
        frame.getContentPane().add(BorderLayout.SOUTH, buttonColor);
        frame.getContentPane().add(BorderLayout.WEST, buttonLabel);
        frame.getContentPane().add(BorderLayout.EAST, label);
        frame.setVisible(true);
    }
 
    class ColorListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            simleGuiPanel.setR((int) (Math.random() * 255));
            simleGuiPanel.setG((int) (Math.random() * 255));
            simleGuiPanel.setB((int) (Math.random() * 255));
            frame.repaint();
        }
    }
 
    class LabelListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            label.setText("Changed");
        }
    }
}
 
import javax.swing.*;
import java.awt.*;
 
public class SimleGuiPanel extends JPanel {
    int r, g, b;
 
    SimleGuiPanel(int r, int g, int b) {
        this.r = r;
        this.g = g;
        this.b = b;
    }
 
    public void paintComponent(Graphics graphics) {
        Color color = new Color(r, g, b);
        graphics.setColor(color);
        graphics.fillOval(70, 70, 100, 100);
    }
 
    public void setR(int r) {
        this.r = r;
    }
 
    public void setG(int g) {
        this.g = g;
    }
 
    public void setB(int b) {
        this.b = b;
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2015, 17:47
Помогаю со студенческими работами здесь

События для динамически создаваемых кнопок
У меня есть таблица, в ней есть пункт "дествие", там кнопка для удаления. При выборе селектора со странами, данные таблицы обновляются,...

События для динамически созданных кнопок
Доброе время суток! Я создал свой класс objekt (); //конструктор save_objekt(TOpenDialog *open_kart); ...

События для динамически создаваемых кнопок
Всем привет. Подскажите, как обработать события на динамически создаваемые кнопки. Тут...

Обработчик события для программно созданных кнопок
Помогите пожалуйста! Есть программно создаваемые кнопки в количестве, зависящем от введенного в TextBox числа. Нужно задать программный код...

Можно ли написать события для кнопок в другом файле?
Здравствуйте! Сейчас пишу программу в Microsoft Visual Studio C# 2010 и так получилось, что у меня очень много кнопок (Около 20). Роль...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru