2013-08-22 4 views
-1

Я пытаюсь отобразить изображение jpeg на панели в JPanel. У меня две панели панели и панель1. Я пытаюсь отобразить изображение на одной панели, а затем удалить панель, чтобы отобразить другую.Как вы добавляете изображение в JPanel

 panel.g2d.drawImage(myimage, 0, 0, null); 

Это дает мне около 50 ошибок, и я не могу напечатать их все, потому что я пишу это на моем телефоне, потому что у меня нет Интернета прямо сейчас.

+3

_ потому что у меня сейчас нет интернета. Как вы здесь написали этот вопрос? – BackSlash

+0

Отправлено на телефон, @BackSlash. – eatonphil

+0

Пожалуйста, посмотрите на этот ответ, чтобы [загрузить изображение] (http://stackoverflow.com/a/9866659/1057230), хотя если вы делаете это вручную (без использования каких-либо IDE), тогда этот [ответ] (http://stackoverflow.com/a/11372350/1057230), несомненно, поможет вам :-) –

ответ

4

Почему бы не просто использовать JLabel вместо этого?

Image image = ImageIO.read(getClass().getResource("/images/MyImage.png")); 
JLabel label = new JLabel(new ImageIcon(image)); 
panel.add(label); 
3

Использование буферного изображения с JPanel. Вот пример

try{ 

     BufferedImage myPicture = ImageIO.read(new File("c://pic.jpg")); 

     picLabel = new JLabel(new ImageIcon(myPicture)); 
     picLabel.setHorizontalAlignment(SwingConstants.CENTER); 
        frame.getContentPane().add(picLabel); 

     }catch (IOException e){} 
2

Для вывода изображения на панели, переопределить метод paintComponent(Graphics) и сделать его там:

public class ImagePanel extends JPanel { 

    private Image image; 

    public void setImage (Image image) { 
     this.image = image; 
     revalidate(); 
     repaint(); 
    } 


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

вы должны переопределить метод GetPreferredSize(), чтобы выставить как большое изображение компонент должен быть (будет использоваться менеджером компоновки родительского контейнера):

@Override 
public Dimension getPreferredSize() { 
    if (image == null) { 
     return super.getPreferredSize(); 
    } 
    Insets insets = getInsets(); 
    return new Dimension(image.getWidth(this) + insets.left + insets.right, image.getHeight(this) + insets.top + insets.bottom); 
} 

Редактировать:JLabel (как указано в других ответах) отлично подходит для отображения простых изображений или значков, но когда вам нужны расширенные функции, такие как автоматическое масштабирование (уменьшение или уменьшение пропорций), черепица (x, y, both) для этого обычно лучше создать для него специализированный класс панели изображений.

+0

Добавить 'super.paintComponent' add Я предлагаю вам голосование – MadProgrammer

+0

@MadProgrammer: done :) –

+1

Легкие деньги;) ... – MadProgrammer

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