Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 18.11.2018, 14:51   #1
DrDany
Новичок
 
Регистрация: 18.11.2018
Сообщений: 3
Репутация: 10
По умолчанию Помогите перейти от Процедур к Классам (пример подпрограммы рисования линии с x1, y1, x2, y2, цвет, фигура)

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

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

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

// соткано из чужого готового примера
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) {
case “Line”: 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_CL OSE); // понимаю: что для Закрытия этого окна
// определение многослойной панели
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.setDefaultLookAndFeelDecorat ed(true); // не понимаю, но что-то вызывало

// ЗДЕСЬ какая-то «штуковина», Передающая переменные (x1, y1, x2, y2, userColor, userFigure)
// в class Figure
new HotCold();

} // from main
} // from HotCold-class
DrDany вне форума   Ответить с цитированием
Старый 18.11.2018, 15:14   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,277
Репутация: 2465
По умолчанию

Цитата:
Сообщение от DrDany Посмотреть сообщение
private static final long serialVersionUID = 1L; // Вообще не понимаю Что это такое
https://docs.oracle.com/en/java/java...ializable.html

Цитата:
Сообщение от DrDany Посмотреть сообщение
setOpaque(false); // не понимаю что делает, оставил пока что
https://docs.oracle.com/en/java/java...Opaque(boolean)

Цитата:
Сообщение от DrDany Посмотреть сообщение
// g.setColor(Color.black); - это в оригинале, Пользовательский цвет предполагаю так:
g.setColor(Color.userColor);
Нет, не так. Просто userColor.

Цитата:
Сообщение от DrDany Посмотреть сообщение
super("Example LayeredTest"); // так ничего и не понял с super'ом, кроме Заголовка
// выход при закрытии окна
Это вызов родительского конструктора.

Цитата:
Сообщение от DrDany Посмотреть сообщение
setDefaultCloseOperation(EXIT_ON_CL OSE); // понимаю: что для Закрытия этого окна
https://docs.oracle.com/en/java/java...eOperation(int)

Цитата:
Сообщение от DrDany Посмотреть сообщение
// как бы сюда ещё и получить переменные из main'a, заданные пользователем?..
Ну так передавайте. Это ж функция. Можете как параметры забахать.

Цитата:
Сообщение от DrDany Посмотреть сообщение
lp.add(figure1, JLayeredPane.DEFAULT_LAYER); // добавил фигуру, но как-то
lp.add(figure2, JLayeredPane.DEFAULT_LAYER); // слишком сложно;
lp.add(figure3, JLayeredPane.DEFAULT_LAYER); // проще должно быть
Что сложного в вызове функции с параметром фигура и в какой слой добавить?

Цитата:
Сообщение от DrDany Посмотреть сообщение
// ЗДЕСЬ какая-то «штуковина», Передающая переменные (x1, y1, x2, y2, userColor, userFigure)
// в class Figure
new HotCold();
Например, параметры вашей функции
new HotCold(x1, y1, x2, y2, userColor, userFigure);
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 16.12.2018, 14:34   #3
DrDany
Новичок
 
Регистрация: 18.11.2018
Сообщений: 3
Репутация: 10
По умолчанию

Спасибо!
DrDany вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Как у ссылки изменить расстояние от текста до подчёркивающей линии, а также цвет, толщину и цвет? Lolopop12 HTML и CSS 2 05.06.2017 03:13
Есть фигура при движение она должна изменять цвет wall33 C++ Builder 10 01.02.2017 17:45
Странные результаты рисования линии tumanovalex C# (си шарп) 6 10.05.2011 19:48
Подпрограммы.Использование процедур Elec92 Помощь студентам 8 01.03.2011 16:00
Алгоритм рисования линии Tronix Паскаль 10 19.08.2010 20:13


01:08.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru