2014-12-29 3 views
1

Я хочу загрузить изображение в JPanel. Изображения, которые будут нарисованы, являются изображениями, сохраненными из этого JPanel.Загрузить изображение в JPanel

Например, у меня есть это изображение, которое было захватом из JPanel, и позже я хочу загрузить это изображение в тот же JPanel.

enter image description here

Я попытался это, но он не работает. Этот фрагмент кода находится внутри класса, который расширяет JPanel. Какие-либо предложения?

public void load(String path) throws IOException { 
     BufferedImage img = ImageIO.read(new File(path)); 
     Graphics2D g2d = img.createGraphics(); 
     g2d.drawImage(img, 0, 0, null); 
     this.repaint(); 
} 

ответ

3

Вы рисуете изображение назад к себе (?), Используя объект Graphics, полученный из самого изображения. Вместо этого сохраните изображение в поле, а не локальную переменную, и нарисуйте это изображение в методе paintComponent JPanel. Самое главное, посмотрите на Swing graphics tutorials

private BufferedImage img; 

public void load(String path) throws IOException { 
     img = ImageIO.read(new File(path)); 
     this.repaint(); 
} 

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    if (img != null) { 
     g.drawImage(img, 0, 0, null); 
    } 
} 
+0

My paintComponent метод обрабатывает другие вещи. Как рисовать изображение за пределами paintComponent? Извините за noobish вопросы я новичок в swing – Manos

+0

@ManosKontakis: вы этого не делаете. Нарисуйте его внутри paintComponent. Пожалуйста, ознакомьтесь с моим изменением кода, пожалуйста, прочитайте учебники. –

+0

Работал. Не думал о решении if (img! = Null). Спасибо за ваш быстрый ответ и ваши рекомендации! – Manos

0

вы можете сделать это с помощью переопределения

общественного недействительного paintComponent (График г) {...} для javax.swing компонентов и общественные недействительные красок (Графика g) для компонентов java.awt

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