| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Наследование графических объектов |
| Автор: Yulia13666 8.5.2010, 11:18 |
| Мне необходимо чтобы от фигуры квадрат наследовался перечеркнутый квадрат. Я так понимаю мне надо сначала создать абстрактный класс с методом для прорисовки, а в производных классах уже реализовать этот метод. Но я не знаю как передать в этот метод параметр Graphics g, который необходимый для рисования. Помогите пожалуйста! |
| Автор: Nofate 8.5.2010, 13:32 | ||
В чем вопрос? )) |
| Автор: Yulia13666 8.5.2010, 15:37 |
| Вопрос в том, ЧТО потом после создания экземпляра класса и вызова метода записать для параметра g?? StrokedSquare SS=new StrokedSquare(); SS.draw(???) |
| Автор: Nofate 8.5.2010, 22:05 |
| Раз вы рисуете квадраты значит есть Graphics, на который они рисуются. Например окно, унаследованное от JFrame, переопределяющее метод update(Graphics g). Вот этот g и передавайте |
| Автор: Yulia13666 9.5.2010, 11:00 |
| /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaapplication5; import java.awt.*; import javax.swing.*; class Square { public void draw(Graphics g) { ... } } class StrokedSquare extends Square { public void draw(Graphics g) { ... } } public class Main { public static void main(String[] args) { JFrame jf = new JFrame("Пример "){}; jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(300 , 300); jf.setVisible(true); StrokedSquare f =new StrokedSquare(); f.draw(g); } } Nofate, помогите, куда здесь надо дописать update(Graphics g) чтобы заработало? |
| Автор: pathfinder 9.5.2010, 12:04 | ||
Код писал с руки, поэтому косяки в написании методов/констант исправить вручную.
|
| Автор: Yulia13666 9.5.2010, 12:28 |
| Спасибо, конечно pathfinder, но я только начала изучать Java, и этот код немного сложноват и не понятен. Мне бы как-то модифицировать код, который написан в предидущем сообщении. |
| Автор: pathfinder 9.5.2010, 12:48 |
| В честь Дня Великой Победы минут через десять выложу полный, со всеми комментариями, готовый к работе пример |
| Автор: Yulia13666 9.5.2010, 13:12 |
| Спасибо большое!! буду ждать!!! |
| Автор: pathfinder 9.5.2010, 13:32 |
| Проект для NetBeans 6.8. Посмотреть пример можно запустив /dist/JGraphic.jar http://narod.ru/disk/20548482000/JGraphic.zip.html Если будут вопросы - помечай коментариями те места что не понятны и выкладывай код(тока заварчивай код в тэги) |
| Автор: Yulia13666 9.5.2010, 13:59 | ||||
| Спасибо большое за программу, очень выручил!!! Я поняла все кроме вот этого. Напиши вообщем что этот код делает!
Добавлено через 14 минут и 9 секунд И еще несколько строк
|
| Автор: pathfinder 9.5.2010, 14:30 |
| Рисовать можно только на графических компонентах. То на том, в чем встроена возможность рисовать на экране. Поэтому в твоем случае можно было пойти двумя путями: 1) Square сделать потомком JComponent. 2) Дать возможность Square отрисовывать себя на другом компоненте. 1 подход дорогостоящий. Поэтому я использовал 2. Что-бы вмешаться в процедуру отрисовки графического компонент необходимо переопределить метод paintComponent(Graphics g). Он вызывается всякий раз когда операционная система решит что необходимо перерисовать часть экрана(на которой расположен на компонент(хотя для Swing все чуть-чуть иначе). Метод repaint() позволяет нам самим сделать запрос на перерисовку компонента, которым мы и пользуемся после добавления новых Square(нам же надо их отрисовать, если не вызвать repaint они отрисуются только если мы растянем окно). Вот собственно и все: в качестве графического компонента, на котором мы будем рисовать, берем JPanel(хотя можно взять любой другой), Square которые мы хотим отрисовать естественно необходимо где-то хранить(по-этому сохраняем их в ArrayList - динамический массив). Т.е. вся работа по отрисовке идет в методе paintComponent(Graphics g). |
| Автор: Yulia13666 9.5.2010, 14:35 |
| Спасибо большое за помощь, pathfinder!!! |
| Автор: pathfinder 9.5.2010, 15:52 |
| Ю а, как говорится, вэлкам ) |
| Автор: irdis13 10.5.2010, 16:53 |
| А что значит в методе public void add(Square ... squareList) "..." я просто начинающий, пишу только пол года, но такого не встречал |
| Автор: pathfinder 10.5.2010, 17:12 |
| "..." - означает что можно подставить от 0 и больше аргументов(в данном случае Square). |