Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2018, 13:51   #1
DrDany
 
Регистрация: 18.11.2018
Сообщений: 3
По умолчанию Помогите перейти от Процедур к Классам (пример подпрограммы рисования линии с 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, 14:14   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от 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, 13:34   #3
DrDany
 
Регистрация: 18.11.2018
Сообщений: 3
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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