2011-02-07 2 views
0
public class Resources 
{ 
    private static Resources myResource = new Resources(); 

    public static Image getImage(String name) 
    { 
    URL url = myResource.getClass().getResource(name); 
    //URL url = Resources.class.getResource(name); 
    return Toolkit.getDefaultToolkit().getImage(url); 
    } 
} 

У меня есть класс ресурсов, который выглядит так, когда я помещаю файл изображения.Java Image не сразу загружается как ресурс

В моей главной JPanel (чертежная доска) У меня есть этот

private Image image = Resources.getImage("image.png"); 

в моем компоненте краски у меня есть

g2.drawImage(image, x, y, width, height, null); 

моя проблема, когда я сначала создать окно (прямоугольник), в котором изображение должно нарисовать себя в правой части, чтобы пользователь мог знать, что он движимый (например, ручка чашки), изображение не появляется сразу, но когда я нажимаю туда, где он должен быть, он появляется. Мне интересно, связано ли это с загрузкой классов или чем-то еще?

* UPDATE Это то, что подразумевается под SSCCE LMNOPQRSTUVWXYZ?

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.*; 
import java.net.*; 
import javax.imageio.ImageIO; 
import javax.swing.*; 


public class ShowImage { 
    static public void main(String args[]) throws Exception { 
    JFrame frame = new JFrame("Display image"); 
    JPanel panel = new testImage(); 
    frame.add(panel); 
    frame.setSize(500, 500); 
    //frame.pack(); 

    //JOptionPane.showMessageDialog(null, "Done setting size"); 
    frame.setVisible(true); 
    frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH); 

    } 
} 

class testImage extends JPanel { 

    Image image = Resources.getImage("pin.png"); 

    public void paintComponent(Graphics g) { 
    g.drawImage(image, 0, 0, 40, 40, null); 
    } 
} 

class Resources 
{ 
    private static Resources myResource = new Resources(); 

    // NOTE: there is no error checking here so if parameter is mistyped 
    // somewhere else in code, then this will probably throw a nullpointerexception 
    public static Image getImage(String name) 
    { 
    // TODO: Find out which way is better or preferred 
    URL url = myResource.getClass().getResource(name); 

    return Toolkit.getDefaultToolkit().getImage(url); 

    } 
} 
+0

Я подозреваю, что ваша проблема находится где-то еще в вашем коде, возможно, как вы добавляете компоненты, будь то переоформление контейнеров, ... Вы можете отправить больше кода. –

ответ

1

Попробуйте поместить изображение в ImageIcon, которое вы можете положить f.e. в JLabel. Это обработает загрузку для вас.

Если это не то, что вы хотите, google для MediaTracker.

+0

Некоторые случайные точки. 1) Toolkit.getImage() загружает изображения асинхронно. 2) Вызов метода drawImage() OP должен использовать компонент как ImageObserver, а не null. 3) Еще один способ получить все изображение - использовать метод ImageIO.read(), который блокирует до завершения. –

+0

Я не понимаю, что f.e. должен быть акронимом для ..? – daveyinaz

+0

f.e. = например – kohlehydrat

1

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

Звуки, как вы делаете:

JLabel label = new JLabel(new ImageIcon(...)); 
frame.pack(); 
frame.setVisible(true); 
frame.add(label); 

Основной код должен быть:

JLabel label = new JLabel(new ImageIcon(...)); 
frame.add(label); 
frame.pack(); 
frame.setVisible(true); 

Если вам нужна дополнительная помощь, тогда разместите свой SSCCE что демонстрирует проблему.

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