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

Некорректная работа программы

28.04.2016, 15:29. Показов 1136. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите, пожалуйста, исправить ошибку в программе. При нажатии на кнопку "Change Circle" все работает корректно, однако если нажать на "Change Label" меняется не только label, но и цвет круга.

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 TwoButtons  { // В данный момент главный класс GUI не реализует интерфейс ActionListener
 
    JFrame frame;
    JLabel label;
    
    public static void main(String[] args) { // Главный метод
        TwoButtons gui = new TwoButtons();
        gui.go();
    }   
    public void go() {
        frame = new JFrame(); // Создаем фрейм
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Эта строка завершает работу программы при закрытии окна (если не добавить ее, то приложение будет "висеть" на экране вечно)
        
        JButton labelButton = new JButton("Change Label");
        labelButton.addActionListener(new LabelListener()); // Вместо передачи (this) методу регистрации слушателя кнопки, передаем ему экземпляр соответствующего класса слушателя
        
        JButton colorButton = new JButton("Change Circle");
        colorButton.addActionListener(new ColorListener()); // Вместо передачи (this) методу регистрации слушателя кнопки, передаем ему экземпляр соответствующего класса слушателя
        
        label = new JLabel("I'm a label");
        MyDrawPanel drawPanel = new MyDrawPanel();
        
        frame.getContentPane().add(BorderLayout.SOUTH, colorButton); // Добавляем кнопку на панель фрейма
        frame.getContentPane().add(BorderLayout.CENTER, drawPanel); // Добавляем панель для рисования в область фрейма
        frame.getContentPane().add(BorderLayout.EAST, labelButton);
        frame.getContentPane().add(BorderLayout.WEST, label);
        
        frame.setSize(500, 500); // Изменен размер. Присваиваем фрейму размер (в пикселах)
        frame.setVisible(true); // Делаем фрейм видимым, иначе ничего не увидим при выполнении кода
        
    }
    
    class LabelListener implements ActionListener{
        public void actionPerformed(ActionEvent event) {
        
            label.setText("Ouch!");  // Внутренний класс знает о label
        }
            
    } // Закрываем внутренний класс
    
    class ColorListener implements ActionListener{
        public void actionPerformed(ActionEvent event) {
        
            frame.repaint(); // Внутренний класс использует переменную экземпляра frame без ссылки на объект внешнего класса. Когда пользователь нажимает кнопку, вызываем для фрейма метод repaint(). Это значит, что метод paintComponent() вызывается для каждого виджета во фрейме
        }
    } // Закрываем внутренний класс
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2016, 15:29
Ответы с готовыми решениями:

Некорректная работа приложения
Решил оптимизировать работу своего приложения по парсингу пользователей VK. Решил использовать метод execute, который позволяет 25 раз...

Работа с файлом (корректный код, некорректная работа программы)
Для записи и чтения файла использую разные функции. По одиночке они работают нормально. Вставляю их прототипы в функцию main() и нижняя...

Некорректная работа программы
Суть программы в том, что есть записанные в файле слова с ответами (разделены "\t\t"). Программа считывает поочереди строки,...

5
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
28.04.2016, 18:00
MyDrawPanel класс тогда уж тоже выложите.
0
 Аватар для tst
1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
28.04.2016, 18:07  [ТС]
Все еще не могу сообразить. Выкладываю:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Круг меняет цвет при каждом нажатии кнопки
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*;
class MyDrawPanel extends JPanel { 
            public void paintComponent(Graphics g) { // Метод панели для рисования paintComponent() вызывается при каждом нажатии кнопки
                // Код для заполнения овала произвольным цветом
            g.fillRect(0, 0, this.getWidth(), this.getHeight()); // Закрасим всю панель черным (цвет по умолчанию). Два первых аргумента - координаты верхнего левого угла по отношению к панели, где начнется рисование. 0.0 - начни с 0 пикселов от левого края и 0 от верхнего. Два других - Сделай ширину прямоугольника как у панели и высотку, как у панели
            
            int red = (int) (Math.random() * 255);
            int green = (int) (Math.random() * 255);
            int blue = (int) (Math.random() * 255);
            
            Color randomColor = new Color(red, green, blue); // Задаем цвет тремя целыми числами, представляющими RGB-значения
            g.setColor(randomColor); 
            g.fillOval(70, 70, 100, 100); // Начинаем рисовать с 70 пикселов слева и 70 пикселов сверху, задаем ширину и высоту по 100 пикселов
        }   
}
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
28.04.2016, 19:32
tst, создавайте темы в подходящих разделах. Не первый день на форуме. В след. раз получите карту.
0
63 / 63 / 58
Регистрация: 19.01.2016
Сообщений: 152
28.04.2016, 20:57
Размер лейбла изменяется, вместе с ним изменяется размер панели, что в свою очередь вызывает метод
paintComponent.

Установи для лейбла размер

Java
1
label.setPreferredSize(new Dimension(100, 500));
1
 Аватар для tst
1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 216
28.04.2016, 21:42  [ТС]
Николай Б, спасибо огромное! Теперь все работает, как положено
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2016, 21:42
Помогаю со студенческими работами здесь

некорректная работа программы
В файлах, которые генирируются со случайными выдает всякую чушь using namespace std; int main() { const int n = 10; //иницализация...

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

Некорректная работа программы
Добрый день! Я попытался решить задачу № 5 "Статистика" с сайта acmp.ру. Текст задачи: Вася не любит английский язык, но каждый...

Некорректная работа программы
Товарищи! Прошу вашей помощи, ибо сам, если честно, не допираю. package xvc; import java.util.Scanner; public class Main { ...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru