Dynamic icons for your JComponents // Create an icon JButton with dynamic icons
The Internet offers countless opportunities and possibilities for developers with imagination. Today, most search engines and specialized sites offer APIs to access their data from other software, sites, devices, etc.
Today I'm going to show you a dirty example of how this APIs can help your program. In less than ten lines of code (someone smarter could have done it with even less) I will add an Icon to a JButton
with an image stored in the net.
To accomplish this I will use Yahoo's Image Search API, documentation can be found here. For demonstration purposes I will use the YahooDemo applicationId, you will need to create one if you intend to use this API in your applications.
In a nutshell, what the program does is decode what the browser gets when it reads an URL built with the API guidelines. The response is an XML InputStream where you can get the URL of a thumbnailed image which you can then pass to the JButton
.
1try {
2 URL url = new URL("http://search.yahooapis.com/ImageSearchService/V1/imageSearch" +
3 "?appid=YahooDemo&query=client%20icon&results=1&format=gif");
4 BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
5 String text ="";
6 String line = null;
7 while((line = br.readLine()) != null){
8 text += line+"\n";
9 }
10 text = text.substring(text.indexOf(""));
11 text = text.substring(text.indexOf("")+5, text.indexOf(""));
12 BufferedImage img = ImageIO.read(new URL(text));
13 jButton1.setIcon( new ImageIcon(img));
14} catch (MalformedURLException ex) {
15 ex.printStackTrace();
16} catch (IOException ex) {
17 ex.printStackTrace();
18}
When you run this code this is what you get:

As you can see the program is quite simple. In the first part, you generate an URL with the desired variables.
Next, we get the contents of the URL and parse it to get the location of the thumbnail image.
Finally, we get the thumbnailed image using ImageIO
.
You can download a running version of the code here.