Avatar billede faded Nybegynder
19. oktober 2005 - 11:21 Der er 2 kommentarer og
1 løsning

System Tray i Java under under win XP

Hvordan får jeg et Java program til at lægge sig i Systemtray i windows xp.

Gerne med et par kode ekspempler
Avatar billede faded Nybegynder
19. oktober 2005 - 12:26 #1
har fundet dette api http://systray.sourceforge.net/, har downloadet den nyeste version, men får følgende fejl fra compileren

java.lang.Error: Unresolved compilation problems:
    SysTrayMenu cannot be resolved
    SysTrayMenu cannot be resolved

    at java.lang.reflect.Constructor.newInstance(Native Method)
    at STMenuTest.main(STMenuTest.java:8)
Exception in thread "main"
Avatar billede faded Nybegynder
19. oktober 2005 - 12:43 #2
min test klasse ser således ud

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

import javax.swing.*;

import snoozesoft.systray.SysTrayMenu;


/**
* This code demonstrates the usage of the SysTrayMenu class.
* @author Tamas Bara
*/
public class STMenuTest extends JFrame implements ActionListener
{
    private final int INIT_WIDTH    = 150;
    private final int INIT_HEIGHT  = 140;

    private static String[] toolTips =
    {
        "SysTray for Java rules!",
        "brought to you by SnoozeSoft 2002"
    };

    private int currentIndexIcon;
    private int currentIndexTooltip;
    private static boolean menuDestroyed;

    public STMenuTest()
    {
        super( "Rocket" );
        setIconImage( new ImageIcon(
            getClass().getResource( "images/rocket.gif" ) ).getImage() );

        Dimension dimScreen = Toolkit.getDefaultToolkit().getScreenSize();

        int xPos = ( dimScreen.width - INIT_WIDTH ) / 2;
        int yPos = ( dimScreen.height - INIT_HEIGHT ) / 2;

        setBounds( xPos, yPos, INIT_WIDTH, INIT_HEIGHT );
        getContentPane().setLayout( new GridLayout( 3, 1 ) );
        setResizable( false );

        JButton btnChangeIcon = new JButton( "Change Icon" );
        btnChangeIcon.setActionCommand( "change icon" );
        btnChangeIcon.addActionListener( this );

        JPanel pnlNorth = new JPanel( new FlowLayout( FlowLayout.CENTER ) );
        pnlNorth.add( btnChangeIcon );

        JButton btnChangeTooltip = new JButton( "Change Tooltip" );
        btnChangeTooltip.setActionCommand( "change tooltip" );
        btnChangeTooltip.addActionListener( this );

        JPanel pnlCenter = new JPanel( new FlowLayout( FlowLayout.CENTER ) );
        pnlCenter.add( btnChangeTooltip );

        JButton btnDestroy = new JButton( "Destroy Menu" );
        btnDestroy.setActionCommand( "destroy" );
        btnDestroy.addActionListener( this );

        JPanel pnlSouth = new JPanel( new FlowLayout( FlowLayout.CENTER ) );
        pnlSouth.add( btnDestroy );

        getContentPane().add( pnlNorth );
        getContentPane().add( pnlCenter );
        getContentPane().add( pnlSouth );

        currentIndexIcon = 0;
        currentIndexTooltip = 0;

        // terminate the application if the menu was destroyed before
        WindowListener listener = new WindowAdapter()
        {
            public void windowClosing( WindowEvent e )
            {
                if( menuDestroyed ) System.exit( 0 );
            }
        };

        addWindowListener( listener );

        show();
    }

    public void actionPerformed( ActionEvent e )
    {
        // change icon button was pressed
        if( e.getActionCommand().equals( "change icon" ) )
        {
            if( currentIndexIcon == 0 ) currentIndexIcon = 1;
            else currentIndexIcon = 0;

            SysTrayMenu.changeIcon( currentIndexIcon );
        }
        // change tooltip button was pressed
        else if( e.getActionCommand().equals( "change tooltip" ) )
        {
            if( currentIndexTooltip == 0 ) currentIndexTooltip = 1;
            else currentIndexTooltip = 0;

            SysTrayMenu.changeTooltip( toolTips[ currentIndexTooltip ] );
        }
        // destroy button was pressed
        else if( e.getActionCommand().equals( "destroy" ) )
        {
            SysTrayMenu.destroy();
            menuDestroyed = true;
        }
        // systray icon was left-clicked
        else if( e.getActionCommand().equals( "show" ) )
        {
            show();
        }
        // the exit item was selected
        else if( e.getActionCommand().equals( "exit" ) )
        {
            SysTrayMenu.destroy();
            System.exit( 0 );
        }
        // the about item was selected
        else if( e.getActionCommand().equals( "about" ) )
        {
            javax.swing.JOptionPane.showMessageDialog( this, "SysTray for Java, version "
                + SysTrayMenu.getVersion() + "\n(C) SnoozeSoft 2002" );
        }
        // other items
        else javax.swing.JOptionPane.showMessageDialog( this, e.getActionCommand() );
    }

    // menu initialization
    public static void main( String[] args ) throws Exception
    {
        UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );

        STMenuTest theApp = new STMenuTest();

        // The text displayed on each menu item.
        String[] items = { "Exit", SysTrayMenu.SEPARATOR, "About", SysTrayMenu.SEPARATOR,
            "Ringo", "George", "Paul", "John" };

        // The ActionCommands assigned to the items.
        String[] actionCommands = { "exit", null, "about", null, "Ringo", "George", "Paul", "John" };

        // The icons
        String[] icons = { "duke.ico", "duke_up.ico" };

        // Initialize the menu
        SysTrayMenu.init( toolTips[ 0 ], theApp, "show", items, actionCommands, icons );
    }
}
Avatar billede faded Nybegynder
19. oktober 2005 - 13:00 #3
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester