|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.11.2018, 13:51 | #1 |
Регистрация: 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 |
18.11.2018, 14:14 | #2 | |||||||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,759
|
Цитата:
https://docs.oracle.com/en/java/java...Opaque(boolean) Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
new HotCold(x1, y1, x2, y2, userColor, userFigure); |
|||||||
16.12.2018, 13:34 | #3 |
Регистрация: 18.11.2018
Сообщений: 3
|
Спасибо!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[РЕШЕНО] Как у ссылки изменить расстояние от текста до подчёркивающей линии, а также цвет, толщину и цвет? | 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 |