2013-06-28 2 views
1

Я думал, что написать() функция графического объекта создает новую копию текущего графического объектаJava: Как скопировать графический объект и повторно использовать его?

это был мой код

Graphics temp; 
temp = g.create(); 
temp.drawString("hello world",100,100); 
g.fillRect(200,200,50,50); 

Теперь я понимаю, что так как температура теперь копия г , любое изменение на temp не отразилось бы на g. Поэтому мой вывод должен был быть просто прямоугольником из-за функции fillRect. Но я получаю как строку, так и прямоугольник на выходе моей краски. Почему это происходит и как его остановить?

+1

это же физическое устройство рисования, только _state_ (например, цвет, преобразование F.I.) не зависит. Чего вы хотите достичь? – kleopatra

+1

Также читайте статью [Создание и рисование изображения] (http://docs.oracle.com/javase/tutorial/2d/images/drawonimage.html) –

+0

Я хотел показать копию графического объекта, на котором последующие изменения не отразятся на исходном объекте. Прямо сейчас я делаю это через изображение и наследую его графику. Просто хотел узнать, было ли более простое решение. – CodeRed

ответ

0

Разве вы не можете просто сделать класс для объекта, например, и Box текстовую строку, и сделать их иметь метод краски следующим образом:

public void paint(Graphics g){ 
    g.setColor(Color.RED); 
    g.fillRect(50, 50, 100, 100); 
} 

И потом, где вы рисуете объекты, вызовите box.paint (г); или что бы вы ни называли своим объектом.

Таким образом, вы можете изменить свойства объектов и независимо друг от друга провести их независимо, не затрагивая другие объекты.

0

Graphics.create дает полный или определенный раздел объекта Graphics, который сгенерировал его - это не новый объект Graphics.

Если вы хотите, чтобы привлечь к графическому объекту (и повторное использование указанного объекта) Я хотел бы предложить, используя BufferedImage производным, OffscreenImage и оттуда обратить OffscreenImage.getGraphics

+0

Прошу прощения за могилу - не заметил возраст до тех пор, пока я не отправил ... – Wayne

1

Я новичок в Java, но, посмотрев в свой код, я вижу, что вы положили g.create(); (я не очень уверен, но) это может означать, что все объявит с g. будут затронуты. Я предлагаю сделать так:

Grapics2D g2d = (Graphics2D) g; 
Graphics temp; 
temp = g2d.create(); 
temp.drawString("hello world",100,100); 
g.fillRect(200,200,50,50); 

надеюсь, что он работал