2015-05-10 6 views
2

У меня есть программа, которая позволяет пользователю рисовать. Но когда пользователь нажимает кнопку очистки, которая вызывает clearRect() и repaint(), пользователь больше не может продолжать рисовать на той же панели. Еще одна проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь нажимает кнопку сохранения или открытия (открывая окно проводника файлов), если пользователь нажимает отменить, панель рисует окно файла на панели. Как я могу исправить эти проблемы?Невозможно нарисовать на JPanel после clearRect() и перекрасить()

public void paintComponent(Graphics g){ 
    super.paintComponents(g); 
    g.fillOval(myX - radius, myY - radius, 2 * radius, 2 * radius); 
    if(img != null) 
     g.drawImage(img, 0, 0, null); 
} 

Ниже часть находится внутри метода actionPerformed

if(source == clear){ 
    g.setBackground(Color.WHITE); 
    g.clearRect(0, 0, getWidth(), getHeight()); 
    repaint(); 
} 

BufferedImage и графики

BufferedImage img = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB); 
Graphics2D g = img.createGraphics(); 

ответ

2

Я подозреваю, что Graphics контекст, g, является недействительным в вашем ActionListener, возможно, из-за используя getGraphics() неуместно. Вместо этого дайте полям ActionListener в вашем классе вида и измените контекст Graphics в paintComponent() с использованием обновленных значений.

В этом полном example различные реализации actionPerformed() в атрибутах обновления buttonPanel указаны в DrawingArea. Реализация paintComponent() в DrawingArea затем знает, что нарисовать каждый время это называется.

image

+0

Я до сих пор не уверен, что я делаю неправильно .... –

+0

я добавил буферизованное изображение и график декларации Наверху. –

+0

Рад, что вы его отсортировали; похоже, что вы смешиваете действительный контекст «Graphics» для «BufferedImage» с тем, который был передан 'paintComponent()'. – trashgod

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