2014-09-10 3 views
2

Я работаю над назначением (GASP) и имеет проблемы с отображением моего изображения. Я не ищу, чтобы кто-то выполнил мое задание для меня, но мне отчаянно нужна помощь в выяснении, почему мой код работает неправильно. Я просмотрел свою книгу по программированию на Java, а также искал ответы онлайн безрезультатно, поэтому, если кто-то может привести меня в правильном направлении, я бы очень признателен! Вот мой displayImage код:Как импортировать изображение в JPanel

import java.awt.Graphics; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class DisplayImage extends JFrame { 
public void DislayImage(){ 
    add (new ImagePanel()); 
} 

public static void main(String[] args) { 
    JFrame frame = new DisplayImage(); 
    frame.setTitle("Go Bearcats!"); 
    frame.setSize(300, 300); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
    Assignment02 a = new Assignment02(); 
    frame.add(a); 

} 
} 
class ImagePanel extends JPanel { 
    public final static String LOC = "C:\\UCincinnatiLogo.jpg"; 
    private ImageIcon imageIcon = new ImageIcon (LOC); 
    private Image image = imageIcon.getImage(); 

    @Override /**Draw image on the panel*/ 
    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 

     if (image !=null) 
      g.drawImage(image, 200, 200, getWidth(), getHeight(), this); 
    } 

} 
+0

Call setVisible после того, как вы добавили свою панель в рамку. Кроме того, что не работает? – MadProgrammer

+0

Это (imho) гораздо проще в использовании JLabel, освещающий значок и помещая ярлык на панели с размером изображения. – Tom

+0

Почему вы говорите, что ваш код работает неправильно? –

ответ

4

Вы хотите добавить компонент прямо на верхней части панели изображения. JFrame использует borderLayout, поэтому все, добавленное к нему, как вы делаете, будет охватывать все, что было добавлено ранее.

JFrame frame = new DisplayImage(); 
frame.setTitle("Go Bearcats!"); 
frame.setSize(300, 300); 
frame.setLocationRelativeTo(null); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setVisible(true); 
Assignment02 a = new Assignment02(); 
frame.add(a); // here you add something on top of your imagePanel 

Вместо этого сделать ImagePanel ContentPane фрейму с помощью setContentPane(...), а затем добавить вещи в JFrame/ContentPane, но быть уверенным, что они не непрозрачным.

public class DisplayImage extends JFrame { 
public void DislayImage(){ 
    setContentPane(new ImagePanel()); 
} 

, а затем,

Assignment02 a = new Assignment02(); 
a.setOpaque(false); 
frame.add(a); 

Обратите внимание, как в сторону, я редко создавать классы, которые расширяют JFrame, и вместо того, чтобы создать свой JFrame, когда это необходимо. Вместо этого я бы создал свой ImagePane, а затем добавил компоненты непосредственно к нему, прежде чем добавлять все в JFrame.


Также вы не показываете нам класс Assignment02, но лучше иметь непрозрачную JPanels и компоненты.

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