Re: TrayIcon with PopupMenu or JPopupMenu ?



Thank you for your response.

This, what you wrote, is what I did in first minutes of my work.

Can I ask you to run following very simple program ?
It changes tray icon and JPanel background every 0.5 second. The
question is : is program continue to work when you popup tray icon
menu (right click) ?

//====================================
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class IsTrayIconMenuBlocking3
{
public static void main( String[] args ) throws Exception
{
// --- JFrame & JPanel section
final JPanel jp = new JPanel();

JFrame jf = new JFrame();
jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
jf.add( jp );
jf.setSize( 300 , 300 );
jf.setVisible( true );

// --- menu item action
ActionListener itemExitAction = new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
System.out.println( "item action: exit" );
System.exit( 0 );
}
};

// --- popup menu
PopupMenu pm = new PopupMenu( "Tray Menu" );
MenuItem mi = new MenuItem( "Exit" );
mi.addActionListener( itemExitAction);
pm.add( mi );

// --- system tray & tray icon
final TrayIcon ti = new
TrayIcon( ((ImageIcon)UIManager.getIcon("OptionPane.questionIcon")).getImage() ,
"Tray Icon" , pm );
SystemTray st = SystemTray.getSystemTray();
ti.setImageAutoSize( true );
st.add( ti );

// --- color & icon changing loop
final Image[] trayIcons = new Image[3];
trayIcons[0] =
((ImageIcon)UIManager.getIcon("OptionPane.errorIcon")).getImage();
trayIcons[1] =
((ImageIcon)UIManager.getIcon("OptionPane.warningIcon")).getImage();
trayIcons[2] =
((ImageIcon)UIManager.getIcon("OptionPane.informationIcon")).getImage();

Runnable colorChanger = new Runnable()
{
private int counter = 0;
private int icon_no = 0;

public void run()
{
System.out.println( "Hello from EDT " + counter++ );

if( jp.getBackground() == Color.RED )
jp.setBackground( Color.BLUE );
else
jp.setBackground( Color.RED );

ti.setImage( trayIcons[icon_no++] );
if( icon_no == trayIcons.length ) icon_no = 0;
}
};

while( true )
{
javax.swing.SwingUtilities.invokeLater( colorChanger);
try{Thread.sleep( 500 );} catch ( Exception e ){}
}

}

}
//====================================

I am using WinXP and Java 6.0 b105 (or Java 6.0 u1 b03).
In my system all GUI operations stops while menu is on screen. I make
some works subclassing EventQueue. My suggestion is maby java goes in
some gui-lock while showing tray icon popup menu ?

Thank you for your time!

.



Relevant Pages

  • Strange GUI freezing TrayIcon + PopupMenu, please help
    ... I wrote very simple program demostrating some GUI activities (changing ... JPanel background color and tray icon). ... ActionListener itemExitAction = new ActionListener ... public void actionPerformed(ActionEvent e) ...
    (comp.lang.java.programmer)
  • Re: ActionListener
    ... When you create a button and add an ActionListener to it, it will default to using the text of the button as its actionCommand. ... public void actionPerformed{ ... private int seeEveryWhereIndex; ... I would put my GUI code in the StudentTest?? ...
    (comp.lang.java.help)
  • Possible Array problem. Applet Compiles but does not run!
    ... I have this script (sorry its long but its neccessary for me to post it ... public class MobileShop extends Applet implements ActionListener{ ... public void paint{ ... private int talktime; ...
    (comp.lang.java.help)
  • Re: thread wait
    ... @param clock Thread that provides the ticks for the main program ... class startListener implements ActionListener { ... public void actionPerformed { ... // arrange panel elements ...
    (comp.lang.java.programmer)
  • Re: Ping Java Peeps
    ... public frame2(ActionListener listener){ ... public class frame1 extends JFrame implements ActionListener{ ... public void actionPerformed{ ... public class frame2 extends JFrame implements ActionListener{ ...
    (comp.lang.java.programmer)