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

Как убрать мигание компонентов фрейма при его перерисовке?

14.05.2015, 14:57. Показов 3222. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, ув. программисты

Прошу помочь: увлеклась Java, начинаю с простого. Суть задачи: есть фрейм, на нем прорисовывается анимация. На этот фрейм нанесены компоненты класса JLabel. Чтобы эти элементы увидеть, я не нашла ничего лучше, чем постоянно их перерисовывать во время смены очередного кадра анимации фрейма В связи с чем проблема: эти самые компоненты время от времени мигают Подскажите, чтобы такого придумать, чтобы не мигало?

Спасибо заранее!

П.С. В коде привела тело основного класса (gain), а также фрейма и одного из 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
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
public class gain {
    static addit addit;
    static additional additional;
    static Happy Happy;
    static pushMe pushMe;
    
    public static void main(String[] args) {
        pushMe=new pushMe();
        pushMe.startThread();
        addit=new addit();
        addit.startThread();
        additional=new additional();
        additional.startThread();
        Happy=new Happy();
        Happy.startThread(); } }
 
class Happy extends JFrame implements Runnable {
    Image[] img=new Image[8];
    int i;
    
    Happy() {
        super();
        this.setSize(496, 450);
        this.setLayout(null);
        this.setResizable(false);
        this.setLocation(300,100);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true); }
    
    public void startThread() {
        Thread stream1 = new Thread(this);
        stream1.start(); }
    
    public void run() {
        this.add(gain.addit);
        this.add(gain.additional);
        this.add(gain.pushMe);
        MediaTracker tr = new MediaTracker(this);
        for ( i=0; i<8; i++ )
            {img[i] = getToolkit().getImage(ResourceLoader.getImage("res/"+i+".png")); 
            tr.addImage(img[i], 0); }
        try {
            tr.waitForAll();}
        catch(InterruptedException e) {}
        i=0;
        go();}
 
    public void paint(Graphics g) {
        g.drawImage(img[i], 0, 20, this);
        gain.pushMe.repaint();
        if (addit.status==1)
            gain.addit.repaint();
        else gain.additional.repaint(); }
 
    public void update(Graphics g) {
        paint(g); } 
 
    public void go() {
        while(true) {
            while( i<8 ) {
                repaint();
                try {
                    Thread.sleep(350);
                    i++;}
                catch (InterruptedException e) {} }
            i=0;} } }
 
 
class addit extends JLabel implements Runnable  {
    ImageIcon ico = new ImageIcon(ResourceLoader.getImage("res/button80.png"));
    action Action= new action();
    static int status=0;
    BufferedImage buffer;
 
    public void rebuildBuffer(){
        int w = getWidth();
        int h = getHeight();
        buffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = buffer.createGraphics(); }
    
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (buffer == null) {
            rebuildBuffer(); }
        g.drawImage(buffer, 0, 0, this); }
    
    public addit() {
        super();
        this.setVisible(false);
        this.setLocation(220, 310);
        this.setSize(80, 80);
        try{
            this.setIcon(ico);
            } catch (Exception e) {} 
        this.addMouseListener(Action); }
    
    public void run() {
        this.waitBeforeStart();
        while(true) {
        this.setVisible(true);
        status=1;
        this.waitMe();
        this.setVisible(false);
        status=0;
        this.waitMe(); } }
    
    public void startThread() {
        Thread stream2 = new Thread(this);
        stream2.start(); }
    
    public void update(Graphics g) {
        paintComponent(g); } 
    
    public void waitMe() {
        try {
            Thread.sleep(1000);}
        catch (InterruptedException e) {} } 
    
    public void waitBeforeStart() {
        try {
            Thread.sleep(2000);}
        catch (InterruptedException e) {} } }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2015, 14:57
Ответы с готовыми решениями:

Убрать мигание при перерисовке изображения
Имеется такой код перерисовки изображения private void timer1_Tick(object sender, EventArgs e) ...

Мигание окна при перерисовке
Как убрать мигание окна в windows при перерисовке?

Как убрать мерцание картинок при перерисовке?
всем привет, помогите столкнулся с такой проблемой, когда у меня картинка в формате jpg спускается...

Как убрать мерцание формы при перерисовке?
у меня в бекграундвокере каждую миллисекунду перерисовывается интерфейс прям на форме и мерцает...

14
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 8
19.05.2015, 14:32  [ТС] 2
Ну пошлите хотя бы мануалы меня читать, чтоле...
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
19.05.2015, 14:43 3
Лучший ответ Сообщение было отмечено InZombia как решение

Решение

А почему бы не положить компоненты в другой контейнер, отличный от того, на котором картинки рисуются?
1
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 8
19.05.2015, 15:37  [ТС] 4
Цитата Сообщение от aleksandy Посмотреть сообщение
А почему бы не положить компоненты в другой контейнер, отличный от того, на котором картинки рисуются?
А тот второй контейнер внутрь первого?
Просто его тоже придется ведь перерисовывать с частотой смены кадров, правильно? Тогда что принципиально изменится?
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
19.05.2015, 20:30 5
Цитата Сообщение от InZombia Посмотреть сообщение
А тот второй контейнер внутрь первого?
Нет, внутрь третьего . Должно получиться что-то вроде такого:
Код
+--------------------------------+
| Panel3                         |
| +----------------------------+ |
| | Panel1                     | |
| |                            | |
| +----------------------------+ |
| +----------------------------+ |
| | Panel2                     | |
| +----------------------------+ |
+--------------------------------+
Я не понимаю, чего ты хочешь получить в итоге, а посему не могу сказать... Картинку нарисуй, что хочешь получить.
0
Автоматизируй это!
Эксперт Python
7211 / 4707 / 1224
Регистрация: 30.03.2015
Сообщений: 13,413
Записей в блоге: 29
19.05.2015, 20:42 6
как раз прорисовку Свинг советуют делать в одном и главном потоке приложения, а все остальное в других. Почитать можно у Корнелла Java 2 том 1 глава 14 многопоточность. Там как раз про правило одного потока для Свинг, советуют перерисовывать через invokeLater а не в отдельных потоках.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
19.05.2015, 20:57 7
так быть не должно
Java
1
JFrame implements Runnable
надо начать с этого

Добавлено через 10 минут
весь остальной код это бред сивой кобылы, его надо просто сжечь огнем - весь
Java
1
2
3
4
 static addit addit;
    static additional additional;
    static Happy Happy;
    static pushMe pushMe;
ЧТО ЭТО???
Java
1
2
3
4
5
6
7
8
        pushMe = new pushMe();
        pushMe.startThread();
        addit = new addit();
        addit.startThread();
        additional = new additional();
        additional.startThread();
        Happy = new Happy();
        Happy.startThread();
а ЭТО?
я хочу это развидеть и забыть...
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 8
20.05.2015, 13:28  [ТС] 8
Цитата Сообщение от Паблито Посмотреть сообщение
я хочу это развидеть и забыть...
Это чистейшей воды троллинг с Вашей стороны, просто некультурно. Воздержитесь в следующий раз.
Цитата Сообщение от aleksandy Посмотреть сообщение
А почему бы не положить компоненты в другой контейнер, отличный от того, на котором картинки рисуются?
Спасибо, так и сделала: фрейм оставила в покое, сделала доп. панель, которая и перерисовывается. Мерцания больше нет.

Всем спасибо за отзывчивость!
0
aleksandy
20.05.2015, 22:17
  #9

Не по теме:

Цитата Сообщение от InZombia Посмотреть сообщение
Это чистейшей воды троллинг с Вашей стороны, просто некультурно. Воздержитесь в следующий раз.
Ну, как сказать... На самом деле код, действительно, бредовый. А если все будут воздерживаться, то как ты научишься писать хорошо.

0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 8
21.05.2015, 10:12  [ТС] 10
Цитата Сообщение от aleksandy Посмотреть сообщение
...если все будут воздерживаться, то как ты научишься писать хорошо.
А чем, простите, мне поможет это замечание?
Без аргументации и советов это просто оскорбление. Троллить - не помогать.

Добавлено через 2 минуты
И опять же таки, Вы говорите код бредовый. Может хоть кто-то удосужится объяснить почему?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
21.05.2015, 10:14 11
Это интернет, детка.
Будь готов к тому, что твой (ужасный) код могут раскритиковать без аргументов.

К тому же в начале сообщения я кое что написал полезное, но ты это пропустила. На обиженных воду возят.
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 8
21.05.2015, 10:19  [ТС] 12
Цитата Сообщение от Паблито Посмотреть сообщение
Будь готов к тому, что твой (ужасный) код могут раскритиковать без аргументов.
Я то готова, просто не нужно облачать это в благородство.
П.С. Кри́тика — это анализ, а не просто суждение. Не путайте.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
21.05.2015, 10:28 13
Цитата Сообщение от InZombia Посмотреть сообщение
Кри́тика — это анализ, а не просто суждение. Не путайте.
лолшто?
Да я просто написал "твой код - отстой, так не делается, он написан не просто плохо - он весь как лапша, он неправильный от начала и до конца". Добавить там больше нечего, это короче чем брать каждую строчку и писать пару абзацев о том, что атата, так не делается, а вот тут нелогично, а тут не по конвенции, а тут вы злоупотребляете статиками.

Это не критика, это просто мое мнение, на которое ты можешь вообще не обратить внимания.
Я болен болезнью "в интернете кто-то неправ."
0
0 / 0 / 0
Регистрация: 22.04.2015
Сообщений: 8
21.05.2015, 10:44  [ТС] 14
Цитата Сообщение от Паблито Посмотреть сообщение
Я болен болезнью "в интернете кто-то неправ."
Ну так бы и сказал, вопросов больше нет.
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
21.05.2015, 13:04 15
Цитата Сообщение от InZombia Посмотреть сообщение
Может хоть кто-то удосужится объяснить почему?
Цитата Сообщение от InZombia Посмотреть сообщение
Ну пошлите хотя бы мануалы меня читать
Ну, вот так как-то. От начала и до конца.
0
21.05.2015, 13:04
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2015, 13:04
Помогаю со студенческими работами здесь

Убрать мерцание при перерисовке объектов
как убрать мерцание? program sharik11; uses crt, graphabc; var x, y, dx, dy: integer;...

Как убрать рамку у некоторых компонентов при выделении
Всем доброго время суток! Как убрать рамку у некоторых компонентов при выделении(см. скрины)...

Как убрать мигание консоли?
Писали что-то типа лабиринта который выводится в консоль,там по нему двигается символ ,каждый раз...

Как и какое вызвать событие на groupbox при изменении его компонентов?
У меня тест (вопрос - это groupbox, в котором три варианта ответа - radiobutton) и мне надо чтобы...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru