1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 19
1

Перейти от Процедур к Классам (пример подпрограммы рисования линии с x1, y1, x2, y2, цвет, фигура)

18.11.2018, 13:14. Показов 636. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Перечитал фрагментарно уйму книг для "чайников" и профи - сегодня осознал, что Основная моя проблема - Непонимание Классов (так до сих пор и не понимаю: "Блин и Рецепт" - кто из них кто.
На конкретном Примере пытаюсь научиться - и пока тщетно без самых элементарных Пониманий.
Помогите реализовать конкретную задачу без насыщения кода излишествами.

Пример задачи.
Дано: "Извне" Координаты, Цвет, тип фигуры (int x1, y1, x2, y2, Color: userColor, String: userFigure), задаваемые Пользователем.
Требуется: Передать значения переменных (а Color - он ещё и не int, как понимаю, а нечто вроде своего Класса(?..) ) в «Процедуру», рисующую, ну, пусть просто Отрезок / Прямоугольник / Эллипс.

Примерно пробую так:

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
// соткано из чужого готового примера
import java.awt.*;
class Figure extends JComponent
{
 private static final long serialVersionUID = 1L; // Вообще не понимаю Что это такое
 private int x1, y1, x2, y2;
 private Color userColor;
 private String userFigure;
 // параметры: цвет и тип фигуры
 Figure(int x1, int y1, int x2, int y2, Color userColor, String userFigure) {
     this.x1 = x1;
     this.y1 = y1;
     this.x2 = x2;
     this.y2 = y2;
     this.userColor = userColor;
     this.userFigure = userFugure;
     setOpaque(false); // не понимаю что делает, оставил пока что
 }
 public void paintComponent(Graphics g) {
     // прорисовка фигуры
     g.setColor(userColor);
     switch (userFigure) {
     caseLine”: g.drawLine(x1, y1, x2, y2); break;
     case “FillRectangle”: g.fillRect(x1, y1, x2, y2); break;
     case “FillOval”: g.fillOval(x1, y1, x2, y2); break;
     }
     // g.setColor(Color.black); - это в оригинале, Пользовательский цвет предполагаю так:
    g.setColor(Color.userColor);
// рядом подписываю пользовательские координаты (для читабельности сместил x+5, y+25):
     g.drawString(text+"; x1="+x1+", y1="+y1, x1+5, y1+25);
     g.drawString(text+"; x2="+x2+", y2="+y2, x2+5, y2+25);
 } // окончание paintComponent
} // окончание класса Figure
 
// С вышеизложенной частью описания и выполнения моей «Процедуры»
// относительно понимаю.
// Далее будет Вызов – и тут-то полнейшая беда (((
 
public class HotCold extends JFrame // так же я назвал HotCold.java, он же запускает(?..) окно
{
 private static final long serialVersionUID = 1L; // не понимаю совсем предназначение этого
 
 public HotCold()
 {
     // создание окна
     super("Example LayeredTest"); // так ничего и не понял с super'ом, кроме Заголовка
     // выход при закрытии окна
     setDefaultCloseOperation(EXIT_ON_CLOSE); // понимаю: что для Закрытия этого окна
     // определение многослойной панели
     JLayeredPane lp = getLayeredPane(); // Именно без ‘lp’ я и хотел бы обойтись (см. ниже) !!!
     // создание трех фигур
// как бы сюда ещё и получить переменные из main'a, заданные пользователем?..
     Figure figure1 = new Figure(0, 0, 100, 100, Color.red , "Line"); // параметры – правильно?
     Figure figure2 = new Figure(100, 100, 200, 200, Color.blue, "FillRectangle");
     Figure figure3 = new Figure(200, 200, 400, 300, Color.green, "FillOval");
    
// здесь хочется вовсе без setBounds вообще обойтись, но не понимаю как дальше быть:
     // определение местоположения фигур в окне
     figure1.setBounds(0, 0, 800, 600); 
     figure2.setBounds(0, 0, 800, 600);
     figure3.setBounds(0, 0, 800, 600);
     // добавление фигур в различные слои
     lp.add(figure1, JLayeredPane.DEFAULT_LAYER); // добавил фигуру, но как-то
     lp.add(figure2, JLayeredPane.DEFAULT_LAYER); // слишком сложно;
     lp.add(figure3, JLayeredPane.DEFAULT_LAYER); // проще должно быть
// не самая важная часть, как считаю:
     // смена позиции одной из фигур
     lp.setPosition(figure2, 0);
 
     // определение размера и открытие окна
     setLocation(200, 100);
     setSize(800, 600);
     setVisible(true);
 }    
 
// дальше хочу всю эту красоту вызвать на экран,
// передавая пользовательские переменные здесь:
      public static void main(String arg[]) {
            // Описание переменных
            int x1, y1, x2, y2;
            Color userColor = (255, 0, 0);
            String userFigure = "Line";
//          JFrame.setDefaultLookAndFeelDecorated(true); // не понимаю, но что-то вызывало
 
// ЗДЕСЬ какая-то «штуковина», Передающая переменные (x1, y1, x2, y2, userColor, userFigure)
// в class Figure
            new HotCold();
            
      } // from main
} // from HotCold-class
0
Эксперт Java
3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.11.2018, 13:20 2
ты бы свинг и прочие гуи оставил в стороне и разбирался бы с классами, чтобы внимание не рассеивать
0
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 19
18.11.2018, 13:28  [ТС] 3
xoraxax, с ними или без - Ответ-то каков?
Подскажи по делу, а не про ГУИ добивай невежду.
Мой вопрос именно про Практическое применение Классов, с Теорией - я разобрался, на Практике - претерпеваю неудачи пока что, оттого и задал мой вопрос на форуме.
0
Эксперт Java
3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.11.2018, 14:12 4
переключись на вэб. Найди какие-нибудь лекции, про Spring, hibernate, и т.д. Они довольно быстро на место все ставят. Ну и если не будешь писать много кода, желательно в команде, то так и не разберешься.
0
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 19
18.11.2018, 15:06  [ТС] 5
xoraxax, спасибо, конечно.
Ещё с дюжину книг/статей - вряд ли помогут быстро - понимание придет со временем.
Конечно, придёт. Жаль, к тому моменту мой вопрос окажется уже неактуален для меня - возможно, Сам же на него и буду отвечать для новичков-последователей, уже как более опытный.
Жаль, что в Специальном Форуме никто не может ответить на простейший вопрос...
0
xoraxax
18.11.2018, 15:10
  #6

Не по теме:

Цитата Сообщение от DrDany Посмотреть сообщение
никто не может ответить на простейший вопрос
жаль что ты с этим простейшим вопросом не можешь разобраться, возможно книги надо было не фрагментарно читать

0
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 19
18.11.2018, 15:25  [ТС] 7
Spring, hibernate - а это что ещё такое?
Мудрейший, я спросил лишь как о том как нарисовать Фигуру с заданными Координатами, Цветом, ну, Тип ещё подставил в ту же функцию.
- Обалденный Ответ! Ещё далее уводящий новичка от истины: "Почитай ещё пару дюжин статей о своих темах".
ЖЖЖесть!
Ну, когда уже ДоТуплюсь через еще массу книг, статей и примеров - Уже сам Отвечать Достойно Последовательно смогу любому новичку. Зачем писать в Форуме, если не собираешься нормально отвечать? - Ради баллов за "ответик" что ли? - Тогда можно было тупо ввести "Да" или "Нет" - null бы уже перестал существовать, а на твой Count "плюсик" бы зачислился
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
16423 / 9048 / 2609
Регистрация: 21.10.2017
Сообщений: 20,763
18.11.2018, 15:38 8
DrDany, спокойно, не надо ругаться
Цитата Сообщение от DrDany Посмотреть сообщение
через еще массу книг, статей и примеров
Вполне достаточно вдумчиво изучить одну(!) книгу, чтобы понять основы. Количество прочитанного - абсолютно не показатель.
Цитата Сообщение от DrDany Посмотреть сообщение
я спросил лишь как о том как нарисовать
У каждого свой подход, свои инструменты для него, к чему он привык и в чем он плотно разбирается. Ты уверен, что тебе именно это будет нужно?

А вот объяснить тебе, что такое классы и зачем они нужны - тот еще вопрос. Это настолько базовая тема, что не сразу можно понять, что там непонятного (сори за каламбур). Есть чертеж дома - это класс. Экземпляр класса - построенный дом. В доме есть переменная -поле "комнаты" - переменная класса "комната". Ну и т.д. Не будешь же ты для постройки каждого дома чертить новый проект? И при черчение нового проекта чертить заново чертежи всех комнат? Примерно в этом и суть...
0
Эксперт Java
3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.11.2018, 15:39 9
Цитата Сообщение от DrDany Посмотреть сообщение
как нарисовать Фигуру с заданными Координатами, Цветом, ну, Тип
во-первых, это ты спросил только тут.
во-вторых. Не истери.
1) Фигура - стало быть нужен класс Фигура.
2)с заданными координатами (допустим плоская фигура) - видимо заданы будут координаты вершин (точек), стало быть нужен класс Точка с полями int x и int y; в классе Фигура нужно хранить коллекцию этих Точек.
3) Цветом - наверно нужен класс цвет, который будет инкапсулировать R,G,B компоненты цвета. В классе фигура будет поле типа Цвет.
4) Нужна какая-то штука, которая будет создавать фигуры, например ФабрикаФигур, допустим в нем будет статический метод, принимающий на вход коллекцию координат и цвет, и отдающий фигуру.
5) Нужна какая-то штука, которая будет рисовать фигуры - РисовательФигур - там уже начинается этот ваш гуй, в который я лезть не хочу.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
18.11.2018, 15:56 10
Цитата Сообщение от DrDany Посмотреть сообщение
Уже сам Отвечать Достойно Последовательно смогу любому новичку.
О, какая удача!
Я как раз новичек и в целях лучшего улучшения материала я пытаюсь решить эту Увеличение в цикле while задачу с помощью стримов.
Много читал статей и книг и прошерстил теории, видел Spring, Hibernate, и даже кажется понял классы, но вот стримы мне пока что-то не даются
Вот я пытался :
Java
1
2
3
4
5
6
7
public static void main(String[] args){
   IntUnaryOperator getGroe2 = num -> num += 2;
   IntUnaryOperator acum = num -> num += num;
   Function<Integer, IntPredicate> isLessFunc = param -> pam -> pam < param;
   String str = IntStream.iterate(1,isLessFunc.apply(20),getGroe2).mapToObj(x -> ""+x).collect(Collectors.joining(" +","sum : "," = "));
   System.out.println(str);
}
Вывод : sum : 1 +3 +5 +7 +9 +11 +13 +15 +17 +19 =
acum - это конечно неправильно, но мне бы как ни будь и аккумулировать и джойнить втрим за одним подходом. ((

Раз уж такая тема, может кто ни будь другой поможет?
0
iSmokeJC
18.11.2018, 16:00
  #11
 Комментарий модератора 
Цитата Сообщение от ViktorFX Посмотреть сообщение
может кто ни будь другой поможет?
Вот и нужно было бы создать свою тему.
Абсолютно незачем задавать свои вопросы в чужой теме, тем более вопросы, не относящиеся напрямую к теме топика.
0
1 / 1 / 0
Регистрация: 12.03.2016
Сообщений: 19
18.11.2018, 16:39  [ТС] 12
Тут-то Путаница у меня и возникла - с Классами.
Спасибо тебе, Добрый человек! Ругаться не собирался - просто "псевдоответы" вынудили.
Я - Новенький в JAVA.
Когда-то я был Новеньким, пересев с "УК НЦ" / Basic на "ZX-Spectrum" /Basic, то же было с IBM / Pascal...
Нынче много-много всего усовершенствовалось в моих знаниях: и HTNL, и PHP, и XML, и матерное слово "парсинг" становится всё любимее при чтении "безумных файлов", какими назвали их не Я, а парсящие файлы MS.

Благо, именно ТЫ, Друг, Понимаешь меня с новым для меня JAVA!

Я Действительно запутался в Классах:
мой Figure должен быть впереди или paint.
Кто кого может вызывать и Откуда(?) - Про Откуда я имею ввиду "main"

- Разобраться с Этим - и дальше Во-Много раз легче станет!

Добавлено через 31 минуту
Ну, Логично: Не в Тему вовсе.
Возможно, он просто уже устал полусоощения получать к своей "беде" - вот и Кричит Во-Всеуслышание..
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru