Programmazione:Java/Esempio System Tray per il caricamento delle API di Java

Da WikiSitech.
Vai alla navigazioneVai alla ricerca

<< Back to Java

JavaApiTray v1.0.0 - System tray e il caricamento delle Java Api locali


Questo programma usa la SystemTray e TrayIcon, carica da un file properties.txt i percorsi delle Api di Java, e facendole poi apparire nella Trayintrodotte dal JAVA 6. Così da avere sulla Tray un colelgmaento alle api di java senza bisogno di essere in rete.

Le api di java in formato html e chm le si possono trovare qui: [1]

Testato su xp e Vista, non sembra dare problemi (fin ora ---- ;) )

Il progetto si compone di tre classi:

JavaApi.java si occupa dell creazione della Tray, TrayIcon, ...

ReadProperties.java legge dal file properties.txt (nella directory /properties)il nome dell'api che si vuole fare apparire sulla tray, il nome del file eseguibile che si vuole usare per aprirla (ad esempio ie o firefox per l'html, hh.exe per il chm,...), e il percorso del file dell'Api di Java (In realtà si può usare anche l'URL del sito della sun). Uso la classe Scanner per poi mettere in un ArrayList il contenuto del file di properties

InfoFrame.java apre un JFrame con le istruzioni di uso

properties.txt file txt così formattato: nome,programma,fileDellApi esempio del mio: Java1.3.1,hh.exe,C:/Programmi/Java/jdk13/jdk131.chm Java1.4.2,hh.exe,C:/Programmi/Java/jdk142/jdk142.chm Java1.6.0,C:/Programmi/Mozilla Firefox/firefox.exe,file:///C:/Programmi/Java/docs/api/index.html JavaEE 1.5.5,hh.exe,C:/Programmi/Java/java-ee-5/java-ee-5.chm


Con click destro (in win) si apre la finestra con le Api caricate dinamicamente



JavaApi.java

package com.java.api;

import javax.swing.*;

import java.awt.*; import java.awt.event.*; import java.io.File;


public class JavaApi {

static class ShowMessageListener implements ActionListener { TrayIcon trayIcon; String title; String message; TrayIcon.MessageType messageType;

ShowMessageListener(TrayIcon trayIcon, String title, String message, TrayIcon.MessageType messageType) { this.trayIcon = trayIcon; this.title = title; this.message = message; this.messageType = messageType; }

public void actionPerformed(ActionEvent e) { trayIcon.displayMessage(title, message, messageType); } }

public static void main(String args[]) { Runnable runner = new Runnable() { public void run() {

// controlliamo che il Sistema supporti il system tray if (SystemTray.isSupported()) { final SystemTray tray = SystemTray.getSystemTray();

// Version: System.out.println("Java Api Tray v.1.0.0 - by Jack"); System.out.println("File Java API prelevati dal file di properties:");

//Icona della tray Image immagine = Toolkit.getDefaultToolkit().getImage( "icon.jpg"); immagine.flush();

JButton closeButton = new JButton("Chiudi"); JButton dialogButton = new JButton("Apri");

// usiamo la classe PopupMenu che estende Menu PopupMenu popup = new PopupMenu();

// Ci creiamo la TrayIcon final TrayIcon trayIcon = new TrayIcon(immagine, "JavaApiTray v.1.0.0", popup);

MenuItem item = new MenuItem();


//Info item = new MenuItem("Info"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { InfoFrame tf = new InfoFrame();

} }); popup.add(item);


final ReadProperties parser = new ReadProperties("./properties/properties.txt"); parser.processLineByLine();


//System.out.println(parser.lista.size());

for (int j=0; j<parser.lista.size();j=j+3){


final String apiname = parser.lista.get(j).toString(); final String prog = parser.lista.get(j+1).toString(); final String file = parser.lista.get(j+2).toString();


item = new MenuItem(apiname); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {

try { //System.out.println(apiname); Runtime runtime = Runtime.getRuntime(); //Process process = runtime.exec("cmd"); String exe = prog + " " + file; Process process = runtime.exec(exe); process.waitFor(); } catch(Exception e1){ e1.printStackTrace(); } } }); popup.add(item);

}


// Usiamo il metodo remove() di SystemTray per rimuovere la // TrayIcon

item = new MenuItem("Chiudi"); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { tray.remove(trayIcon); } }); popup.add(item);

try { tray.add(trayIcon); } catch (AWTException e) { System.err.println("Ahi ahi ahi, can't add to tray!!"); } } else { System.err.println("Ahi ahi ahi, il sistema non supporta il SystemTray"); } } }; EventQueue.invokeLater(runner); }


}



ReadProperties.java

package com.java.api;


import java.io.*; import java.util.ArrayList; import java.util.Scanner; import java.io.IOException;

public class ReadProperties {

ArrayList lista = new ArrayList();

public ReadProperties(String aFileName){ fFile = new File(aFileName); }

public final void processLineByLine(){ try { //Scannere per ogni linea Scanner scanner = new Scanner(fFile); while ( scanner.hasNextLine() ){ processLine( scanner.nextLine() ); } scanner.close(); } catch (IOException ex){ log(ex.getMessage()); } }

protected void processLine(String aLine){ //Secondo Scanner per il contenuto della linea Scanner scanner = new Scanner(aLine); scanner.useDelimiter(","); if ( scanner.hasNext() ){ String apiname = scanner.next(); String prog = scanner.next(); String file = scanner.next();

lista.add(apiname); lista.add(prog); lista.add(file);


log("Apiname: " + quote(apiname.trim()) + ", Programma : " + quote(prog.trim()) + ", File : " + quote(file.trim())); } else { log("Empty or invalid line. Unable to process."); } scanner.close(); }


private final File fFile;

private static void log(Object aObject){ System.out.println(String.valueOf(aObject)); }

private String quote(String aText){ String QUOTE = "'"; return QUOTE + aText + QUOTE; } }


InfoFrame.java

package com.java.api;

import java.awt.Color;

import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea;

public class InfoFrame extends JFrame { // JFrame toolframe;

public InfoFrame() {

JTextArea jtextarea = new JTextArea( "......:::::: Java Api Tray v 1.0.0 ::::::......\r\n\r\n" + "by Jack\r\n\r\n" + "CIAO,\r\n" + " basta aggiungere al file properties.txt le Api in formato html o chm che si hanno in locale," + " formattate in questo modo: il nome che si vuole visualizzare sulla tray, il percorso del programma di avvio " + "e il percorso del file della libreria.\r\n\r\n" + "Il carattere di separazione tra nomeApi, programma e fileApi è la virgola (,)\r\n" + "Serve una nuova linea sul file per ogni libreria.");

jtextarea.setFocusable(true); jtextarea.setEditable(false); jtextarea.setLineWrap(true); jtextarea.setWrapStyleWord(true); jtextarea.setBackground(Color.LIGHT_GRAY);

JScrollPane jscrollpane = new JScrollPane(jtextarea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);


JFrame toolframe = new JFrame("almabios"); toolframe.getContentPane(); toolframe.setSize(300, 400);

toolframe.add(jscrollpane);

toolframe.setVisible(true); }

}


|-|