Где вы помещаете изображение, которое вы загружаете для кнопки в Java-приложении? - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть пакет com.supercorp.killerapp, и внутри него есть пакет (com.supercorp.killerapp.views), если я не создаю приложение с помощью графического редактора:

  • Как мне установить значок кнопки на JInternalFrame, который находится в каталоге представлений?
  • Как вообще получить доступ к изображениям в другой папке?
  • Должны ли все мои изображения содержаться в отдельной папке?

Синтаксис, который я использую:

JButton iconButton = new JButton(new ImageIcon("page_delete.png"));

Кнопка не отображает изображение.

Ответы [ 2 ]

4 голосов
/ 09 декабря 2010

Я помещаю банку с моим приложением в пакет с именем com.example.GreatApp.resources, а затем загружаю его с помощью:

getClassLoader().getResourceAsStream(
               "com/example/GreatApp/resource/icon.png");`

Обновление. Полный пример

/**
 * Creates and returns an ImageIcon from the resource in jar.
 * @param location resource location in the jar,
 * like 'com/example/GreatApp/res/icon.png' or null if it was not found.
 */
public ImageIcon createImageIconFromResource(String location)
           throws java.io.IOException {
  java.io.InputStream input = getClassLoader().getResourceAsStream(
               location);
  // or throw an ioexception here aka `file not found`
  if(input == null) return null;
  return new ImageIcon(ImageIO.read(input));
}
3 голосов
/ 09 декабря 2010

Вы можете поместить изображения в любом месте на пути к классам. Я считаю наиболее логичным поместить их в корень проекта в папку «images».

Пакеты отображаются в папки при компиляции и упаковке, поэтому они выглядят так, как вам нужно:

Image im = Toolkit.getDefaultToolkit().getImage( "/com/supercorp/killerapp/views/page_delete.png" );
JButton iconButton = new JButton( new ImageIcon( im ) );
...