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

Снова. Снова этот repaint()

29.05.2015, 19:45. Показов 1638. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Сколько дней уже пытаюсь, нечего не выходит. Метод repaint не срабатывает. Как я понимаю, ошибка появляется в методе redraw класса draw. Ниже приведу укороченный код программы.
Надеюсь кто-нибудь поможет мне. Заранее спасибо.

Самый главный файл:

Java
1
2
3
4
5
6
7
8
public class main {
    private static int star[][] = new int[50][2];
    private static int colstar = 0;
    public static void main(String[] args) {
        new window().window();
        new tick(star, colstar);
    }
}
Window:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class window extends JFrame{
    public void window(){
        setTitle("Mega Stars");
        setBounds(100,100,500,500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setBackground(new Color(50,50,50));
        JPanel panel = new draw();
        add( panel );
        setVisible(true);
    }
}

Tick:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class tick{
    private int[][] star;
    private int colstar;
    private Timer t;
    public tick(int[][] starIn, int colstarIn){
        star = starIn;
        colstar = colstarIn;
        
        t = new Timer(1000, new timer());
        t.start();
    }
    void draw(){
        new draw().redraw(star, colstar);
    }
    class timer implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            draw();
        }
    }
}
Draw:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class draw extends JPanel{
    private int[][] draw;
    private int coldraw;
    private Thread call;
    
    private int i = 0;
    
    public void redraw(int star[][], int colstar){
        draw = star;
        coldraw = colstar;
        repaint();
        System.out.println("redraw");
    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.clearRect(0, 0, 500, 500);
 
        g.setColor(new Color(255,255,255,200));
        g.fillRect(i, 15, 3, 3);
        System.out.println("Paint");
    }
}

Сейчас в консоль выводит:
Paint Paint Paint redraw redraw redraw ...
Если бы работал repaint выводило бы что-то наподобие этого:
Paint Paint Paint redraw Paint redraw Paint redraw Paint ...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2015, 19:45
Ответы с готовыми решениями:

И снова у меня проблема с JTable
Суть проблемы такая: прикрутил я к одной колонке ComboBox, который выпадает при нажатии на ячейку...

и снова о ВЕБ - сервисах
сабж: http://www.relib.com/news/news.asp?id=1402 '...наибольшего успеха в области...

И снова Java + JSON
Доброго времени суток. Есть сервер с базой данных и PHP скриптом (API). И есть клиент, написанный...

И снова парсер арифметических выражений
Здравствуйте! Возникла проблема, как добавить функционал понимания функций в парсер строки. То...

10
Автоматизируй это!
Эксперт Python
7210 / 4705 / 1224
Регистрация: 30.03.2015
Сообщений: 13,412
Записей в блоге: 29
29.05.2015, 20:23 2
Цитата Сообщение от vlodis Посмотреть сообщение
new window().window();
зачем городить? Просто конструктор нельзя было использовать? и такое использование методов у тебя не один раз в коде. Имя класса должно быть с большой буквы и нежелательно заводить переменные не отличимые от имени класса.
0
0 / 0 / 0
Регистрация: 29.05.2015
Сообщений: 6
29.05.2015, 20:41  [ТС] 3
Цитата Сообщение от Welemir1 Посмотреть сообщение
зачем городить? Просто конструктор нельзя было использовать? и такое использование методов у тебя не один раз в коде. Имя класса должно быть с большой буквы и нежелательно заводить переменные не отличимые от имени класса.
Спасибо за такое замечание. Исправил все классы, кроме класса draw, так как если переименовать, возникает ошибка при присваивании класса под тип JPanel.
Но ошибка с repaint еще остается)
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
29.05.2015, 21:04 4
new draw().redraw(star, colstar);
Тут создается типа панель из класса draw и что дальше? Она никуда не добавляется.
Вообще код очень стремный, его надо стереть и переписать с нуля, по-другому. Но перед этом почитать пару уроков по компонентам и ООП.
0
0 / 0 / 0
Регистрация: 29.05.2015
Сообщений: 6
29.05.2015, 21:13  [ТС] 5
Цитата Сообщение от Паблито Посмотреть сообщение
new draw().redraw(star, colstar);
Тут создается типа панель из класса draw и что дальше? Она никуда не добавляется.
Вообще код очень стремный, его надо стереть и переписать с нуля, по-другому. Но перед этом почитать пару уроков по компонентам и ООП.
Так внутри new draw().redraw(star, colstar) происходит вызов repaint, который в свою очередь вызовет paintComponent, или я чего-то не понимаю?
Да, то что код стремный это точно, но я только начинаю программировать на java, так что потом подучусь и всё исправлю.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
29.05.2015, 21:21 6
Цитата Сообщение от vlodis Посмотреть сообщение
вызов repaint, который в свою очередь вызовет paintComponent
я не уверен что будет вызов, панель создана, но никуда не добавлена
она сама по себе, нет смысла на ней что-то перерисовывать
0
0 / 0 / 0
Регистрация: 29.05.2015
Сообщений: 6
29.05.2015, 21:33  [ТС] 7
Цитата Сообщение от Паблито Посмотреть сообщение
я не уверен что будет вызов, панель создана, но никуда не добавлена
она сама по себе, нет смысла на ней что-то перерисовывать
В классе window есть вот это -
Java
1
2
JPanel panel = new draw();
add( panel );
window вызывается раньше класса draw, и по моему, добавляет панель, возможно я ошибаюсь.
Но 1 раз программа рисует мой квадрат, он не рисует последующие разы..
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
29.05.2015, 21:43 8
Цитата Сообщение от vlodis Посмотреть сообщение
window вызывается раньше класса draw, и по моему, добавляет панель, возможно я ошибаюсь
добавляет
а new draw().redraw(star, colstar);
куда добавляет?

вобщем я немного переписал код, получилось не идеально, но на форуме есть человек, который любит рефакторить мой код - он зайдет и доведет его до идеала
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
public class Trololo {
 
    private static int star[][] = new int[50][2];
    private static int colstar = 0;
 
    public static void main(String[] args) {
        new Window(star, colstar);
    }
}
 
class Window extends JFrame {
    Window(int[][] starIn, int colstarIn) {
        setTitle("Mega Stars");
        setBounds(100, 100, 500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setBackground(new Color(50, 50, 50));
        add(new MyCoolPanel(starIn, colstarIn));
        setVisible(true);
    }
}
 
class MyCoolPanel extends JPanel {
 
    private int[][] starIn;
    private int colstarIn;
    private int i = 0;
    private final Color myColor = new Color(255, 255, 255, 200);
 
    MyCoolPanel(int[][] starIn, int colstarIn) {
        this.starIn = starIn;
        this.colstarIn = colstarIn;
 
        new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("timer tick");
                repaint();
            }
        }).start();
    }
 
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.clearRect(0, 0, 500, 500);
        g.setColor(myColor);
        g.fillRect(i, 15, 3, 3);
        System.out.println("Paint");
    }
}
я там все классы в один файл собрал что бы легче было тестить, их потом можно разнести по разным
1
0 / 0 / 0
Регистрация: 29.05.2015
Сообщений: 6
29.05.2015, 21:57  [ТС] 9
Цитата Сообщение от Паблито Посмотреть сообщение
добавляет
а new draw().redraw(star, colstar);
куда добавляет?

вобщем я немного переписал код, получилось не идеально, но на форуме есть человек, который любит рефакторить мой код - он зайдет и доведет его до идеала
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
public class Trololo {
 
    private static int star[][] = new int[50][2];
    private static int colstar = 0;
 
    public static void main(String[] args) {
        new Window(star, colstar);
    }
}
 
class Window extends JFrame {
    Window(int[][] starIn, int colstarIn) {
        setTitle("Mega Stars");
        setBounds(100, 100, 500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setBackground(new Color(50, 50, 50));
        add(new MyCoolPanel(starIn, colstarIn));
        setVisible(true);
    }
}
 
class MyCoolPanel extends JPanel {
 
    private int[][] starIn;
    private int colstarIn;
    private int i = 0;
    private final Color myColor = new Color(255, 255, 255, 200);
 
    MyCoolPanel(int[][] starIn, int colstarIn) {
        this.starIn = starIn;
        this.colstarIn = colstarIn;
 
        new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("timer tick");
                repaint();
            }
        }).start();
    }
 
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.clearRect(0, 0, 500, 500);
        g.setColor(myColor);
        g.fillRect(i, 15, 3, 3);
        System.out.println("Paint");
    }
}
я там все классы в один файл собрал что бы легче было тестить, их потом можно разнести по разным
Ааа.... теперь все понятно.
Но вот только мне желательно нужен таймер вне класса унаследованного от JPanel или JFrame. Таймер будет вызывать еще кучу других методов и делать это из JPanel мне кажется не лучшей идеей. Как быть?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
29.05.2015, 22:18 10
Лучший ответ Сообщение было отмечено vlodis как решение

Решение

как вариант, хотя можно сделать кучей способов, смотря что вообще в конце-концов планируется
Кликните здесь для просмотра всего текста
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
public class Trololo {
 
    private static int star[][] = new int[50][2];
    private static int colstar = 0;
 
    public static void main(String[] args) {
        Window w = new Window(star, colstar);
 
        new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("timer tick");
                w.repaint();
            }
        }).start();
    }
}
 
class Window extends JFrame {
    Window(int[][] starIn, int colstarIn) {
        setTitle("Mega Stars");
        setBounds(100, 100, 500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setBackground(new Color(50, 50, 50));
        add(new MyCoolPanel(starIn, colstarIn));
        setVisible(true);
    }
}
 
class MyCoolPanel extends JPanel {
 
    private int[][] starIn;
    private int colstarIn;
    private int i = 0;
    private final Color myColor = new Color(255, 255, 255, 200);
 
    MyCoolPanel(int[][] starIn, int colstarIn) {
        this.starIn = starIn;
        this.colstarIn = colstarIn;
    }
 
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.clearRect(0, 0, 500, 500);
        g.setColor(myColor);
        g.fillRect(i, 15, 3, 3);
        System.out.println("Paint");
    }
}
1
0 / 0 / 0
Регистрация: 29.05.2015
Сообщений: 6
29.05.2015, 22:38  [ТС] 11
Цитата Сообщение от Паблито Посмотреть сообщение
как вариант, хотя можно сделать кучей способов, смотря что вообще в конце-концов планируется
Кликните здесь для просмотра всего текста
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
public class Trololo {
 
    private static int star[][] = new int[50][2];
    private static int colstar = 0;
 
    public static void main(String[] args) {
        Window w = new Window(star, colstar);
 
        new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("timer tick");
                w.repaint();
            }
        }).start();
    }
}
 
class Window extends JFrame {
    Window(int[][] starIn, int colstarIn) {
        setTitle("Mega Stars");
        setBounds(100, 100, 500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setBackground(new Color(50, 50, 50));
        add(new MyCoolPanel(starIn, colstarIn));
        setVisible(true);
    }
}
 
class MyCoolPanel extends JPanel {
 
    private int[][] starIn;
    private int colstarIn;
    private int i = 0;
    private final Color myColor = new Color(255, 255, 255, 200);
 
    MyCoolPanel(int[][] starIn, int colstarIn) {
        this.starIn = starIn;
        this.colstarIn = colstarIn;
    }
 
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.clearRect(0, 0, 500, 500);
        g.setColor(myColor);
        g.fillRect(i, 15, 3, 3);
        System.out.println("Paint");
    }
}
Черт возьми, замечательное решение.)
Вроде разобрался. Спасибо.
0
29.05.2015, 22:38
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2015, 22:38
Помогаю со студенческими работами здесь

И снова проблема со Struts (validate): Cannot find message resources under key org.apache.struts.action.Message
Имеем imdex.jsp: <%@ page language='java' %> <%@ taglib uri='/WEB-INF/struts-html.tld'...

Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино
Здравствуйте! Собственно, проблема уже не новая, хотя, как показывают сообщения форума, за...

Как сделать чтобы таймер дойдя до 0 стартовал снова и снова?
Здравствуйте :) Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? TimerSec = 59;...

HP 625 снова и снова перезагружается в безопасный не заходит
Ребята помогите , проблема вот какая врубаю я ноут он доходит до заставки майкрософта и снова...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Что лучше использовать при создании класса в 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-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru