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

Ошибка в отрисовке объекта

21.04.2018, 15:26. Показов 904. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Чтобы было проще понять: это рисование крестов в крестиках-ноликах. Проблема следующая: при нажатии на верхнюю левую область, происходит отрисовка в ней и в области среднего ряда 1 слева клетки. Я подозреваю, что ошибка в координатах.


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
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
public class PressingB implements MouseListener {
    static boolean b1;
    static boolean b2;
    static boolean b3;
    static boolean b4;
    static boolean b5;
    static boolean b6;
    @Override
    public void mouseClicked(MouseEvent e) {
        Graphics g = Game.p.getGraphics();
        if((e.getX()>99&&e.getX()<140&&e.getY()>80&&e.getY()<119)&&b1!=true){
            b1=true;
            Draw1(g);
        }
        if((e.getX()>141&&e.getX()<182&&e.getY()>80&&e.getY()<121)&&b2!=true){
            b2=true;
            Draw1(g);
        }
        if((e.getX()>182&&e.getX()<222&&e.getY()>80&& e.getY()<120)&&b3!=true){
            b3=true;
            Draw1(g);
        }
        if((e.getX()>100&&e.getX()<141&&e.getY()>121&&e.getY()<162)&&b4!=true){
            b4=true;
            Draw1(g);
        }
        if((e.getX()>141&&e.getX()<181&&e.getY()>121&&e.getY()<141)&&b5!=true){
            b5=true;
            Draw1(g);
        }
        if((e.getX()>182&&e.getX()<222&&e.getY()>121&&e.getY()<142)&&b6!=true){
            b6=true;
            Draw1(g);
        }
    }
    public void Draw1(Graphics g){
        if(b1==true) {
            Graphics2D g1 = (Graphics2D) g;
            g1.setPaint(Color.red);
            g1.drawLine(100, 80, 140, 120);
            g1.drawLine(100, 120, 140, 80);
        }
        if(b2==true){
            Graphics2D g1= (Graphics2D)g;
            g1.setPaint(Color.red);
            g1.drawLine(141, 80, 181, 120);
            g1.drawLine(141, 120, 181, 80);
        }
        if(b3==true){
            Graphics2D g1= (Graphics2D) g;
            g1.setPaint(Color.red);
            g1.drawLine(182, 80, 222, 120);
            g1.drawLine(182, 120, 222, 80);
        }
        if(b4=true){
            Graphics2D g1= (Graphics2D) g;
            g1.setPaint(Color.red);
            g1.drawLine(100, 121, 141, 162);
            g1.drawLine(100, 162, 141, 121);
        }
 
        if(b5==true){
            Graphics2D g1= (Graphics2D) g;
            g1.setColor(Color.red);
            g1.drawLine(141, 121, 181, 162);
            g1.drawLine(141, 162, 181, 121);
        }
        if(b6==true){
            Graphics2D g1= (Graphics2D) g;
            g1.setColor(Color.red);
            g1.drawLine(182, 121, 222, 162);
            g1.drawLine(182, 162, 222, 121);
        }
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
 
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
 
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
 
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
 
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2018, 15:26
Ответы с готовыми решениями:

Мерцание при отрисовке объекта
Вечер добрый! Собственно, в моей программе при круговом движении эллипса наблюдается мерцание на...

Ошибка при отрисовке меню
Всем доброго дня (ну, или что у вас там за окошком :) )! Пробую создать сайт в...

Ошибка при отрисовке линии
Добрый день гении! Пытаюсь разобраться с QPainter, QPaintEvent для того, чтобы рисовать собственно...

GLES 2 ошибка при отрисовке квадрата
Здравствуйте! Никак не пойму, в чем ошибка... В openGL полный чайник и завис на первых же шагах....

16
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
18571 / 10768 / 2897
Регистрация: 21.10.2017
Сообщений: 22,949
21.04.2018, 15:40 2
Цитата Сообщение от NukaWorld Посмотреть сообщение
Я подозреваю
Как правило, IDE пишет ошибку и где она произошла. Покажешь?
0
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 33
21.04.2018, 15:49  [ТС] 3
IDE не пишет ошибку, т.к. самой ошибки нет. Она чисто техническая. Представь себе поле крестиков-ноликов, при нажатии на одну из клеток, должен отрисовываться в этой области крест (только в этой), а выходит, что я нажимаю на 1 область, а отрисовка происходит сразу в 2.
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
18571 / 10768 / 2897
Регистрация: 21.10.2017
Сообщений: 22,949
21.04.2018, 15:54 4
NukaWorld, значит у тебя два ифа срабатывают. Юзай else if...
0
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 33
21.04.2018, 15:58  [ТС] 5
А как это в таком случае сделать? Ведь нажатия не должны зависеть друг от друга, а если юзать if else, то они хочешь не хочешь будут зависеть)
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
18571 / 10768 / 2897
Регистрация: 21.10.2017
Сообщений: 22,949
21.04.2018, 16:03 6
При любом нажатии проверяются координаты. Что тут от чего зависит??
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if((e.getX()>99&&e.getX()<140&&e.getY()>80&&e.getY()<119)&&b1!=true){
            b1=true;
            Draw1(g);
        }else if((e.getX()>141&&e.getX()<182&&e.getY()>80&&e.getY()<121)&&b2!=true){
            b2=true;
            Draw1(g);
        }else if((e.getX()>182&&e.getX()<222&&e.getY()>80&& e.getY()<120)&&b3!=true){
            b3=true;
            Draw1(g);
        }else if((e.getX()>100&&e.getX()<141&&e.getY()>121&&e.getY()<162)&&b4!=true){
            b4=true;
            Draw1(g);
        }else if((e.getX()>141&&e.getX()<181&&e.getY()>121&&e.getY()<141)&&b5!=true){
            b5=true;
            Draw1(g);
        }else if((e.getX()>182&&e.getX()<222&&e.getY()>121&&e.getY()<142)&&b6!=true){
            b6=true;
            Draw1(g);
        }
0
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 33
21.04.2018, 16:06  [ТС] 7
Не помогло.
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
18571 / 10768 / 2897
Регистрация: 21.10.2017
Сообщений: 22,949
21.04.2018, 16:18 8
NukaWorld, т.е. при первом же клике рисуется в двух областях?
0
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 33
21.04.2018, 16:22  [ТС] 9
Да, причем именно на клике на левую верхнюю, отрисовка в ней и на клетку ниже
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
18571 / 10768 / 2897
Регистрация: 21.10.2017
Сообщений: 22,949
21.04.2018, 16:23 10
Цитата Сообщение от NukaWorld Посмотреть сообщение
b1!=true
зачетная конструкция
0
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 33
21.04.2018, 16:26  [ТС] 11
Старался)
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
18571 / 10768 / 2897
Регистрация: 21.10.2017
Сообщений: 22,949
21.04.2018, 16:29 12
Епрст! Вот тут постарайся!
Цитата Сообщение от NukaWorld Посмотреть сообщение
if(b4=true){
1
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 33
21.04.2018, 16:31  [ТС] 13
Боже, iSmokeJC храни!
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
18571 / 10768 / 2897
Регистрация: 21.10.2017
Сообщений: 22,949
21.04.2018, 16:33 14
NukaWorld,
Неужели IDE тебе не подсвечивает всякую дребедень? Переходи на IDEA!
0
0 / 0 / 0
Регистрация: 17.03.2018
Сообщений: 33
21.04.2018, 16:35  [ТС] 15
IDEA и не подсвечивает
0
Эксперт функциональных языков программированияЭксперт Java
4537 / 2729 / 486
Регистрация: 28.04.2012
Сообщений: 8,618
21.04.2018, 18:17 16
Цитата Сообщение от NukaWorld Посмотреть сообщение
IDEA и не подсвечивает
А это что?
Миниатюры
Ошибка в отрисовке объекта   Ошибка в отрисовке объекта  
0
Эксперт функциональных языков программированияЭксперт Java
4537 / 2729 / 486
Регистрация: 28.04.2012
Сообщений: 8,618
21.04.2018, 19:33 17
NukaWorld, вообще, кошмарный код, конечно. Почитай, например, “Clean Code” Robert C Martin.

Хотя бы как-то так:
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
import java.awt.*;
import java.util.Objects;
 
final class Cross {
 
    static Cross of(int leftX, int topY, int size, Color activeColor) {
        Objects.requireNonNull(activeColor);
        if (size < 0) {
            throw new IllegalArgumentException("Negative size");
        }
        return new Cross(leftX, topY, size, activeColor, null);
    }
 
    static Cross of(int leftX, int topY, int size, Color activeColor, Color inactiveColor) {
        Objects.requireNonNull(activeColor);
        Objects.requireNonNull(inactiveColor);
        if (size < 0) {
            throw new IllegalArgumentException("Negative size");
        }
        return new Cross(leftX, topY, size, activeColor, inactiveColor);
    }
 
    private final int leftX;
    private final int topY;
    private final int rightX;
    private final int bottomY;
    private final int size;
    private final Color activeColor;
    private final Color inactiveColor;
    private boolean active = false;
 
    private Cross(int leftX, int topY, int size, Color activeColor, Color inactiveColor) {
        this.leftX = leftX;
        this.topY = topY;
        this.size = size;
        this.rightX = leftX + Math.max(0, size - 1);
        this.bottomY = topY + Math.max(0, size - 1);
        this.activeColor = activeColor;
        this.inactiveColor = inactiveColor;
    }
 
    boolean containsPointInArea(int x, int y) {
        return x >= leftX && x <= rightX && y >= topY && y <= bottomY;
    }
 
    void activate() {
        this.active = true;
    }
 
    void draw(Graphics2D g) {
        if (size == 0) {
            return;
        }
        if (active) {
            draw(g, activeColor);
        } else if (inactiveColor != null) {
            draw(g, inactiveColor);
        }
    }
 
    private void draw(Graphics2D g, Color c) {
        g.setColor(c);
        g.drawLine(leftX,    topY, rightX, bottomY);
        g.drawLine(leftX, bottomY, rightX,    topY);
    }
}
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
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;
import java.util.function.Supplier;
 
final class PressingB extends MouseAdapter implements MouseListener {
 
    private final List<Cross> crosses;
    private final Supplier<Graphics2D> graphicsSupplier;
 
    PressingB(List<Cross> crosses, Supplier<Graphics2D> graphicsSupplier) {
        this.crosses = crosses;
        this.graphicsSupplier = graphicsSupplier;
    }
 
    @Override
    public void mouseClicked(MouseEvent e) {
        crosses.stream()
                .filter(cross -> cross.containsPointInArea(e.getX(), e.getY()))
                .forEach(Cross::activate);
        final var graphics = graphicsSupplier.get();
        if (graphics == null) {
            return;
        }
        crosses.forEach(cross -> cross.draw(graphics));
    }
}
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
import javax.swing.*;
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
 
final class Game {
 
    public static void main(String[] args) {
        final var crosses = createCrosses(41, Color.RED);
        final var window = new JFrame("Game");
        final var listener = new PressingB(crosses, () -> (Graphics2D) window.getGraphics());
        window.addMouseListener(listener);
        window.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        window.setMinimumSize(new Dimension(640, 480));
        window.pack();
        window.setVisible(true);
    }
 
    private static List<Cross> createCrosses(int size, Color color) {
        final var crosses = new ArrayList<Cross>();
        for (int i = 0; i < 2; i++) {
            final int topY = 80 + i*size;
            for (int j = 0; j < 3; j++) {
                final int leftX = 100 + j*size;
                crosses.add(Cross.of(leftX, topY, size, color, Color.GRAY));
            }
        }
        return crosses;
    }
}
0
21.04.2018, 19:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2018, 19:33
Помогаю со студенческими работами здесь

Где может быть ошибка в отрисовке?
Здраствуйте! Создаю пользовательский контрол. Событие отрисовки выглядит так: class...

Ошибка при отрисовке спектра частот
Здравствуйте, форумчане. Пишу плеер на Bass, при отрисовке спектра выдает 'Out of system...

Ошибка с ссылкой объекта не указывает на экземпляр объекта
Здраствуйте . Я тут пишу программу на морской бой и у меня как только пытаюсь узнать координат и...

Property объекта родителя и ошибка "Ссылка на объект не указывает на экземпляр объекта"
Доброе время суток! Что-то заклинило в верхнем отсеке тела! Понимаю, что это уже грабли...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru