2013-08-11 2 views
0

создать объект под названием «Город»Изменение цвета нарисованного овал

City city = new City (name, rec, g); 

конструктор объекта выглядит следующим образом:

public City (String name, Rectangle r, Graphics g){ 
    this.name = name; 
    this.r = r; 
    this.g = g; 
    } 

Создавая этот объект я также нарисуйте овал на загруженном и установите его цвет в СИНИЙ. Вот как я рисую объект:

g = (Graphics2D) window.lblNewLabel.getGraphics(); 
     g.setColor(Color.BLUE); 
     g.fillOval(mouseX, mouseY, 15, 15); 

Я хотел бы быть в состоянии изменить этот цвет позже, после нажатия на сам овал. Я пытаюсь вызвать эту функцию, но она не работает:

 public void isClicked(){ 
    clicked = true; 
    this.color = Color.RED; 
    this.g.setColor(Color.PINK); 

} 

Как изменить цвет существующего объекта?

ответ

5

Использование getGraphics() на компоненте вызывает переходную графику. Объект, который будет использоваться для самого компонента. Любые последующие вызовы repaint стирают картину, выполненную с использованием этого объекта.

Изменить цвет, переопределив метод paintComponent. Сохраните переменную Color как переменную-член класса и используйте ее для определения овального цвета в методе.

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(savedColor); 
    g.fillOval(mouseX, mouseY, 15, 15); 
} 
3

Не используйте getGraphics() сделать картину, что картина носит лишь временный характер и будут потеряны в следующий раз Качели определяет компоненты должны быть перекрашены.

Отъезд Playing With Shapes Другие идеи по рисованию.

Вы можете использовать ShapeIcon, который позволяет вам изменить цвет значка. Значок можно нарисовать в методе paintComponent() вашего ярлыка.

Или вы можете использовать ShapeComponent, который использует ShapeIcon. Затем вы можете просто добавить компонент на ярлык, как и любой другой компонент.

Я хотел бы быть в состоянии изменить этот цвет позже, после нажатия на овальных сам

ShapeIcon будет добавлен к JLabel. Затем вы можете просто добавить MouseListener к метке ShapeComponent, чтобы изменить цвет значка.

0

Когда вы нарисовали объекты с объектом Graphics, они затем отображаются на экране. Вы не можете напрямую изменить их цвет, вместо этого вам придется перерисовывать свою графику в любое время, когда вы хотите их изменить. Если вы хотите отслеживать цвета для объектов, вам придется хранить данные в какой-то переменной и использовать их при рисовании.

Смежные вопросы