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

Очень странное поведение программы

17.03.2017, 17:03. Показов 1331. Ответов 5

Студворк — интернет-сервис помощи студентам
Приветствую.
У меня проблема, которая не поддается логическому объяснению. По этому - меньше слов, больше дела.
Хочу сделать графический редактор. В качестве проверки нужно сделать так, что при изменения значения ползунка - менялся цвет сферы. Но при этом происходит что-то неведомое мне.


До изменения ползунка (JSlider):

После:


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

Буду благодарен за любой совет.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2017, 17:03
Ответы с готовыми решениями:

Странное поведение чисел
Всем привет! Делаю калькулятор(такой же как в Win XP), так вот когда хочу например штобы решило выражение (2.4 - 0.6) он выводит мне...

Странное поведение 'HttpSession' в сервлете
Привет ребята! Имею странное поведение 'HttpSession' в сервлете. Когда получаю request с URI, который идентифицирую как 'logon', ...

Странное поведение Hibernate в Servlet
Прошу помощи о хибернейт. Есть 3 класса Connect , Main, HelloServlert. В классе Connect всё для работы с хибернейт... Класс...

5
126 / 113 / 56
Регистрация: 05.12.2012
Сообщений: 463
17.03.2017, 21:04
Ну без кода трудно сказать. Попробуйте тот самый слайдер добавить на отдельную панель, а ее уже куда Вам нужно.
1
 Аватар для Alradalion
132 / 126 / 85
Регистрация: 13.09.2013
Сообщений: 485
18.03.2017, 11:58
Вы имеете в виду тот остаточный рисунок, который у вас наверху? Скорее всего, где-то не перерисовали панель. Обычно решается repaint() или super.repaint() или super.paintComponent(g);. Но да, лучше смотреть код
1
1 / 1 / 2
Регистрация: 01.03.2017
Сообщений: 15
18.03.2017, 17:43  [ТС]
Извините, и вправду забыл оставить код.

Класс Main:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
//Made by SharpSided
//Date *date*
 
package com.sharpsided.main;
 
public class Main {
    
    public static void main (String[] args){
        PaintToolGUI window = new PaintToolGUI();
        window.drawGUI();
        window.setVisible(true);
    }
}
Основной класс:

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
//Made by SharpSided
//Date *date*
 
package com.sharpsided.main;
 
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
 
@SuppressWarnings("serial")
public class PaintToolGUI extends JFrame{
    
    //Loads
    private Dimension windowSize = new Dimension(770, 500);
    private DrawPanel drawPanel = new DrawPanel();
    
    //Component loads
    private JPanel mainPanel = new JPanel();
    private JToolBar toolBar = new JToolBar();
    private JButton brushButton = new JButton();
    private JButton eraserButton = new JButton();
    private JButton sphereButton = new JButton();
    private JButton boxButton = new JButton();
    private JButton sphericButton = new JButton();
    private JSlider colorSlider1 = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
    private JSlider colorSlider2 = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
    
    //Image loads
    private ImageIcon brushIcon = new ImageIcon("images/brushTool.png");
    private ImageIcon sphericIcon = new ImageIcon("images/sphericBox.png");
    private ImageIcon boxIcon = new ImageIcon("images/boxTool.png");
    private ImageIcon sphereIcon = new ImageIcon("images/sphereTool.png");
    private ImageIcon eraserIcon = new ImageIcon("images/eraserTool.png");
    
    //Listener loads
    private MListener mouseListener = new MListener();
    private SlideListener slideListener = new SlideListener();
    
    //Constructor
    public PaintToolGUI(){
        super("Paint-Tool by_SharpSided");
        setSize(windowSize);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }
    
    //GUI
    public void drawGUI(){
        mainPanel.setLayout(new BorderLayout());
        
        brushButton.setIcon(brushIcon);
        eraserButton.setIcon(eraserIcon);
        sphereButton.setIcon(sphereIcon);
        sphericButton.setIcon(sphericIcon);
        boxButton.setIcon(boxIcon);
        
        colorSlider1.addChangeListener(slideListener);
        setColorSlider(colorSlider1);
        setColorSlider(colorSlider2);
        
        toolBar.setFloatable(false);
        toolBar.add(brushButton);
        toolBar.add(eraserButton);
        toolBar.add(sphereButton);
        toolBar.add(sphericButton);
        toolBar.add(boxButton);
        toolBar.add(colorSlider1);
        toolBar.add(colorSlider2);
        
        add(drawPanel, BorderLayout.CENTER);
        add(toolBar, BorderLayout.SOUTH);
        
        drawPanel.addMouseListener(mouseListener);
    }
    
    void setColorSlider(JSlider slider){        
        slider.setMajorTickSpacing(50);
        slider.setMinorTickSpacing(10);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
    }
    
    //Draw panel
    class DrawPanel extends JPanel{
            
        Graphics draw;
        
        public void paintComponent(Graphics g){
            
            draw = g;
            
            draw.setColor(Color.black);
            draw.fillOval(50, 50, 100, 100);
        }
        
        public void setColor(Color col){
            draw.setColor(col);
            drawPanel.repaint();
        }
    }
    
    class MListener implements MouseListener{
        
        public void mouseClicked(MouseEvent event){ 
            
        }
        
        public void mouseEntered(MouseEvent event){ 
            
        }
        
        public void mouseExited(MouseEvent event){ 
            
        }
        
        public void mousePressed(MouseEvent event){
            
        }
        
        public void mouseReleased(MouseEvent event){ 
            
        }
    }
    
    class SlideListener implements ChangeListener {
        public void stateChanged(ChangeEvent event){
            JSlider source = (JSlider) event.getSource();
            if(source == colorSlider1){
                int curentState = colorSlider1.getValue();
                Color sliderBack = new Color(curentState, curentState, curentState);
                drawPanel.setColor(sliderBack);
            }
        }
    }
}
Добавлено через 19 минут
Цитата Сообщение от kushok Посмотреть сообщение
Попробуйте тот самый слайдер добавить на отдельную панель
Я попробовал, но это не помогло. Место где находятся кнопки - это ToolBar. Панель может добавиться на него, но очень криво. Не подстраивается под размер окна и т. д. Но все равно спасибо.

Добавлено через 11 минут
Цитата Сообщение от Alradalion Посмотреть сообщение
Обычно решается repaint() или super.repaint() или super.paintComponent(g);.
Если хотите, можете посмотреть код. Ни чего больше сказать не могу.
0
77 / 77 / 77
Регистрация: 29.01.2017
Сообщений: 167
18.03.2017, 18:43
Лучший ответ Сообщение было отмечено SharpSided как решение

Решение

добавь super.paintComponent(g) - чтобы не было этого миража.


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    class DrawPanel extends JPanel {
        Color c = Color.BLACK;
 
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(c);
            g.fillOval(10, 0, 100, 100);
        }
 
        public void setColor(Color col) {
            c = col;
            repaint();
        }
    }
Добавлено через 5 минут
Цитата Сообщение от SharpSided Посмотреть сообщение
Я даже не знаю из-за какой части кода появилась эта "ошибка" или баг
пользуйся дебаггером
0
1 / 1 / 2
Регистрация: 01.03.2017
Сообщений: 15
18.03.2017, 19:18  [ТС]
Спасибо. Разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.03.2017, 19:18
Помогаю со студенческими работами здесь

Странное поведение таблиц в библиотеке javaFX
Как сделать таблицу java для ввода данных? Как написано в официальной документации, всем известная и самая популярная TableView...

Очень странное поведение
Вот пример страницы с формой, где проявляется странная ошибка: открыть . Форма, на ней TEXTAREA и 2 кнопки. Все тривиально. При...

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

Очень странное поведение ноутбука
Итак, есть ноутбук, смартфон и ПК. ONT от Ростелекома, к которому подключен свой роутер TP-LINK. ПК подключен по локалке, с ним проблем...

Очень странное поведение материнки!
Привет коллеги! Проблема вот в чем. Отдали материнку, сказали нерабочая после того, как решили добавить в слот оперативки DDR3 на 4 гига с...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru