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

Выход графического примитива за пределы области рисования

04.12.2018, 11:53. Показов 980. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Может кто нибудь помочь с разбором поставленной задачи. Реализовать конструктор в классе Circle, который выполняет проверку значения радиуса и при необходимости - изменение его так, чтобы окружность не выходила за пределы области рисования.
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
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Circle extends JPanel
{
    private static int x, y, r;
 
    public Circle(int x1, int y1, int rad)
    {
        this.x = x1;
        this.y = y1;
        this.r = rad;
    }
 
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.RED);
        g.drawOval(x, y, r, r);
        repaint();
    }
}
 
public class Window
{
    public static JPanel circle = null;
 
    public int random_number1, random_number2, random_number3;
 
    private Window()
    {
        JFrame myWindow = new JFrame("Меню");
        myWindow.setSize(700,650);
 
        JMenuBar menuBar = new JMenuBar();
        myWindow.setJMenuBar(menuBar);
 
        JMenu Create = new JMenu("Создать");
        menuBar.add(Create);
 
        JMenuItem CreateEllipse = new JMenuItem("Круг");
        Create.add(CreateEllipse);
 
        JButton button_move = new JButton("Переместить");
        myWindow.add(button_move, BorderLayout.SOUTH);
 
        JMenu Clear = new JMenu("Удалить");
        menuBar.add(Clear);
 
        JMenuItem ClearMyEllipse = new JMenuItem("Круг");
        Clear.add(ClearMyEllipse);
 
        CreateEllipse.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
 
                if (circle == null)
                {
                    random_number1 = -25 + (int) (Math.random() * 30);
                    random_number2 = -25 + (int) (Math.random() * 30);
                    random_number3 = 50 + (int)(Math.random() * 100);
                    circle = new Circle(random_number1, random_number2, random_number3);
                    myWindow.add(circle);
                    myWindow.revalidate();
                    myWindow.repaint();
                }
 
                else
                {
                    JOptionPane.showMessageDialog(myWindow, "Окружность уже создана!");
                }
 
            }
        });
 
 
        ClearMyEllipse.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (circle != null)
                {
                    myWindow.remove(circle);
                    circle = null;
                    myWindow.revalidate();
                    myWindow.repaint();
                }
                else
                {
                    JOptionPane.showMessageDialog(myWindow, "Окружность не создана!");
                }
            }
        });
 
 
        myWindow.setLocationRelativeTo(null);
        myWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myWindow.setVisible(true);
    }
 
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Window();
            }
        });
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.12.2018, 11:53
Ответы с готовыми решениями:

Рисования в форме графического примитива
Помогите,Создать программу рисования в форме графического примитива с заливкой. Примитив рисуется при нажатии кнопки мыши (событие onDown)...

Как написать простую программу для рисования линии или другого графического примитива
Как написать простую программу для рисования линии или другого графического примитива в geany на с++. Большое спасибо.

Пределы области рисования
Подскажите, пожалуйста, при рисовании графических объектов (окружность, например) как лучше выводить на экран и как определить пределы...

2
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
04.12.2018, 21:34
x есть, y есть, радиус есть. if (x+radius) > width значит вышли за границу справа, тогда x нужно присвоить значение width-radius
0
0 / 0 / 0
Регистрация: 14.11.2017
Сообщений: 10
04.12.2018, 21:36  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.12.2018, 21:36
Помогаю со студенческими работами здесь

Перерисовка графического примитива
Доброго дня. Прошу помочь разобраться с перерисовкой графических фигур в окне. Не могу понять каким образом "заставить"...

Программа для графического примитива
Подскажите как написать программу в QBASIC для вот этого: в центре построить окружность, в нее вписать правильный пятиугольник и в его...

Построение графического примитива в методе класса
Простая функция построения примитива не работает в методе пользовательского класса, выдает ошибку. Как с этим бороться? unit Unit1; ...

Считать из файла параметры графического примитива и изобразить его
Есть файл с вот такими вот данными rectangle:235,231,190,150;line:260,390,78,56; Как считать с файла это условие, чтобы выполнить его...

Составить программу для вычисления параметров графического примитива «правильный многоугольник»
Составить программу для вычисления параметров графического примитива «правильный многоугольник»: В параметрах указать координаты центра,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru