Образ Java не сразу загружается как ресурс - PullRequest
0 голосов
/ 08 февраля 2011
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);
  }
}

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

В моей основной 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);

  }
}

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

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

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

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 , который демонстрирует проблему.

1 голос
/ 08 февраля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...