- Красота спасет мир: меняем иконки Java-приложений
- Java+Kotlin=Love
- Site about programming in Java, its features and surprises with examples of coding.
- Замена иконки на форме приложения
- Как изменить значок приложения по умолчанию в Java?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- How to change a frame’s title bar icon (application icon) in Java AWT Toolkit
- Note
- Application context example
Красота спасет мир: меняем иконки Java-приложений
Бывает скачаешь на компьютер свеженькое Java-приложеньице, отправишь его в мобильник по каналу Bluetooth, установишь, и. Вот незадача: иконка мидлета, отображаемая перед его названием в общем списке, намного больше или меньше всех остальных. Или же вовсе отсутствует. На работу программы подобные моменты, конечно же, не влияют, но смотрится это как минимум неаккуратно. Да и вообще — талантливые программисты, снабжающие нас десятками интересных мидлетов, далеко не всегда являются еще и продвинутыми дизайнерами: порой качество иконок настолько низкое, что у особо впечатлительных пользователей просыпается желание удалить свежеустановленную программку, даже не опробовав ее в деле.
К счастью, ничто не мешает заменить иконку на какую-нибудь другую или отрегулировать ее размеры самостоятельно — для этого нам понадобятся компьютер и такие приложения, как архиватор WinRAR и графический редактор Adobe Photoshop. Напомню, что Java-приложение по своей структуре является самым обычным архивом с расширением .jar, следовательно, для того чтобы получить доступ к его внутренностям, нужно открыть его с помощью WinRAR. Учитывая, что большинство современных мидлетов насыщены графикой, отыскать в списке файлов необходимую картинку в формате .png, выступающую в роли иконки, может оказаться непросто. Для того чтобы определить ее название и месторасположение, нужно зайти в папку META-INF и открыть находящийся в ней файл MANIFEST.MF с помощью обычного блокнота.
Рассмотрим ситуацию на примере Opera Mini 4.1. Итак, заглядываем в MANIFEST.MF и видим, что там упоминается файл i.png. Пример данного мобильного браузера очень показателен — название файла иконки здесь прописано целых два раза, в то время как в других мидлетах оно может быть указано только лишь одним из этих способов. Никаких ограничений на название иконки не накладывается, но чаще всего разработчики называют ее либо i.png, либо 1.png, либо icon.png.
Далее может быть два варианта действий в зависимости от ваших целей — или вы хотите заменить иконку на свою, или собираетесь корректировать ее размеры. В первом случае следует подготовить png-картинку, которая выглядит именно так, как вам нравится, и перетянуть ее в окно архиватора, в котором в данный момент отображается список файлов Java-приложения. Естественно, название новой иконки должно быть аналогично имени уже имеющейся — чтобы смена одного файла другим прошла корректно. Теперь можно отправлять мидлет в телефон и наслаждаться похорошевшим видом списка приложений.
Если что-то не в порядке с размерами иконки, то мы выделяем ее в списке файлов мышкой и вытягиваем на рабочий стол. Затем открываем в Photoshop’е и элементарно меняем ее размеры (ALT+CTRL+I). Даю небольшую подсказку: идеальные параметры иконок для смартфонов Nokia — 48х48 точек, а вот для телефонов Sony Ericsson наилучшим образом подходят картинки, длина и ширина которых равны 16 пикселям. Как только параметры иконки будут изменены и сохранены, необходимо сделать то же, что и в первом случае — перетянуть, отправить и насладиться.
Ну а что делать, если программа вообще не имеет иконки? На самом деле, такое бывает крайне редко — вероятно, вы скачали версию мидлета, предназначающуюся для некоторых моделей телефонов Samsung или Motorola, в которых отображение пиктограмм сторонних приложений в меню не предусмотрено вовсе. При этом разработчик наверняка прописал название иконки и путь к ней в MANIFEST.MF, вот только ее саму в мидлет добавить «забыл» — все равно ведь не пригодится. Следовательно, вам необходимо открыть «манифест» в блокноте, посмотреть название иконки и месторасположение папки, в которой она якобы находится, убедиться, что на самом деле ее там нет, создать ее в Photoshop’е и забросить туда, куда нужно. Дальнейшие действия, думаю, очевидны.
И помните: работать с мидлетами необходимо именно в окне WinRAR»а — если приложение попросту разархивировать, заменить файлы отредактированными, запаковать и попробовать проинсталлировать в телефон, то он с вероятностью 99% выдаст сообщение о поврежденном мидлете и прекратит установку. Обидно будет, не так ли?
Java+Kotlin=Love
Site about programming in Java, its features and surprises with examples of coding.
Замена иконки на форме приложения
Если вы уже насмотрелись на чашечку дымящейся джавы, которая по умолчании присваивается каждому JFrame, то пора уже заменить на собственную иконку. Иконка меняется на первый взгляд просто:
JFrame frame = new JFrame("Заголовок").setIconImage(ВашаИконка);
Где «ВашаИконка» должна быть типа Image.
Следующий шаг — как получить иконку, которая есть у нас в ресурсах, например в папке «res/img/ИмяФайлаИконки«, ведь хочется при всем оставаться в области относительности путей к любым файлам ресурсов приложения. Это тоже, казалось бы, не сложно исполнить:
Image ВашаИконка= new ImageIcon(УРЛПутьКИконке).getImage();
Где «УРЛПутьКИконке» должен быть типа URL. И, воспользовавшись вызовом
getResource("res/img/ИмяФайлаИконки")
можно с лёгкостью дотянуться до любого файла из наших файловых ресурсов.
И вот тут начинается самое интересное — getResource() — это метод объекта класса, который мы можем вызвать следующим образом:
frame.getClass().getResource("res/img/ИмяФайлаИконки")
Но это не работает для статических объектов классов, обязательно нужен «живой» не статический объект класса, чтобы получить от него ресурс. Если же в главном и любимом методе main приложения попытаться такое сделать — будет ошибка, ведь главный метод — статический и он работает только со статическими ссылками. Но выход есть через статическое обращение к классу следующим образом:
URL УРЛПутьКИконке = ГлавныйКласс.class.getResource("res/img/ИмяФайлаИконки");
Также можно завести объект класса JFrame через наследование, в этом случае у нас будет объект от которого мы можем «дотянуться» до ресурса.
То есть надо для этого написать гораздо больше кода, сначала в методе main:
static JFrame frame = new MyJFrameWithIcon();
а затем оформить и сам класс новой формы:
class MyJFrameWithIcon extends JFrame < public MyJFrameWithIcon() < URL resURL = getClass().getResource("res/img/ИмяФайлаИконки"); Image img = new ImageIcon(resURL).getImage(); setIconImage(img); >>
Примечение: к сожалению, такой метод не проходит для диалоговых окон, например для JFileChooser, поскольку последний ведет свою родословную не от JFrame, а от JComponent. Так что, как для «чосеров» заменить иконку — я пока не знаю, буду рад подсказке в комментариях. И если способ все-таки есть — я им дополню эту заметку.
Как изменить значок приложения по умолчанию в Java?
Я использую NetBeans, пытаясь изменить знакомый значок чашки кофе Java на файл png, который я сохранил в каталоге ресурсов в файле jar. Я нашел много разных веб-страниц, которые утверждают, что у них есть решение, но пока никто из них не работает.
Вот то, что у меня есть на данный момент (исключая блок try-catch):
URL url = new URL("com/xyz/resources/camera.png"); Toolkit kit = Toolkit.getDefaultToolkit(); Image img = kit.createImage(url); getFrame().setIconImage(img);
Класс, содержащий этот код, находится в пакете com.xyz, если это имеет значение. Этот класс также расширяет JFrame. Этот код генерирует исключение MalformedUrlException в первой строке.
У кого-нибудь есть решение, которое работает?
ОТВЕТЫ
Ответ 1
java.net.URL url = ClassLoader.getSystemResource("com/xyz/resources/camera.png");
Может или не может потребоваться ‘/’ в начале пути.
Ответ 2
Вы можете просто запустить Netbeans в представлении проекта, перейдите в свойство JFrame , выберите свойство изображения значка, выберите свойство Set Form iconImage , используя: «Пользовательский код», а затем в функции Form.SetIconImage() введите следующие код:
Toolkit.getDefaultToolkit().getImage(name_of_your_JFrame.class.getResource("image.png"))
Не забывайте импортировать:
Ответ 3
Или поместите изображение в местоположение относительно класса, и вам не нужна вся информация об этом пакете/пути в самой строке.
com.xyz.SomeClassInThisPackage.class.getResource( "resources/camera.png" );
Таким образом, если вы переместите класс в другой пакет, вам не нужно будет найти все строки, просто переместите класс и его каталог ресурсов.
Ответ 4
Попробуйте эту запись после
initcomponents(); setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("Your image address")));
Ответ 5
/** Creates new form Java Program1*/ public Java Program1() Image im = null; try < im = ImageIO.read(getClass().getResource("/image location")); >catch (IOException ex) < Logger.getLogger(chat.class.getName()).log(Level.SEVERE, null, ex); >setIconImage(im);
Это то, что я использовал в графическом интерфейсе в netbeans, и он отлично работал
Ответ 6
В классе, который расширяет метод использования javax.swing.JFrame setIconImage .
this.setIconImage(new ImageIcon(getClass().getResource("/resource/icon.png")).getImage());
Ответ 7
Вы должны определить значки различного размера, дистрибутивы Windows и Linux, например, Ubuntu используют разные значки на панели задач и Alt-Tab.
public static final URL ICON16 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug16.png"); public static final URL ICON32 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug32.png"); public static final URL ICON96 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug96.png"); List images = new ArrayList<>(); try < images.add(ImageIO.read(HelperUi.ICON96)); images.add(ImageIO.read(HelperUi.ICON32)); images.add(ImageIO.read(HelperUi.ICON16)); >catch (IOException e) < LOGGER.error(e, e); >// Define a small and large app icon this.setIconImages(images);
Ответ 8
URL imageURL = this.getClass().getClassLoader().getResource("Gui/icon/report-go-icon.png"); ImageIcon iChing = new ImageIcon("C:\\Users\\RrezartP\\Documents\\NetBeansProjects\\Inventari\\src\\Gui\\icon\\report-go-icon.png"); btnReport.setIcon(iChing); System.out.println(imageURL);
Ответ 9
внутри конструктора фрейма
Ответ 10
Вы можете попробовать этот, он работает просто отлично:
' ImageIcon icon = new ImageIcon(".//Ressources//User_50.png"); this.setIconImage(icon.getImage());'
How to change a frame’s title bar icon (application icon) in Java AWT Toolkit
Learn how to define a custom icon for a frame in the AWT Toolkit of Java.
The customization of your application is essential to create a confidence feeling for your user. One of those tiny details is the usage of an icon, to leave at least the impression that you are really working dedicatedly in the application. In this article we’ll show you how you can quickly change the icon of your application with the code in Java AWT Toolkit.
The only thing you will need is an image to use as icon for your application, if you are lacking of imagination or you just want to test quickly, you can download some random icon from this website. Once you have some icon to use, just follow the next logic:
// Create some frame instance Frame window = new Frame(); // Create an image instance from the image that you want to use as icon for your app Image icon = Toolkit.getDefaultToolkit().getImage("C:\\some-directory\\icon.png"); // And set it window.setIconImage(icon);
You will need an instance of a Frame that allows the customization of the icon, then create an instance of an Image with the default Toolkit of Java AWT from a local path (note that if the file is inside your project resources, you can use a relative path or join it with the current application path). The getImage method of the toolkit returns an image which gets pixel data from the specified file, whose format can be either GIF, JPEG or PNG. Finally call the setIconImage method from the frame and pass as first argument the instantiated image.
Note
The recommended format is the PNG that allows transparency on your icon so it will look better on any screen.
Application context example
The following code represents the mentioned logic during the initialization of a frame within a structured application context:
package sandbox; import java.awt.*; public class Sandbox < Sandbox()< // Create a new frame Frame window = new Frame(); // Create an image instance from the image that you want to use as icon for your app. Image icon = Toolkit.getDefaultToolkit().getImage("C:\\some-directory\\icon.png"); window.setIconImage(icon); // Set other options of the frame . window.setLayout(null); window.setSize(400,400); window.setVisible(true); >/** * Initialize app. * * @param args */ public static void main(String[] args) < Sandbox app = new Sandbox(); >>