Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.gui > #565

Swing embedded in SWT JPo

From "rjkoop" <rjkoop@THRWHITE.remove-dii-this>
Subject Swing embedded in SWT JPo
Message-ID <1167937309.866198.186320@6g2000cwy.googlegroups.com> (permalink)
Newsgroups comp.lang.java.gui
Date 2011-04-27 15:28 +0000
Organization TDS.net

Show all headers | View raw


  To: comp.lang.java.gui
I'm having problems when I embed an Swing component within an SWT
composite.  Inside the Swing component I have a JTable that contains a
JPopupMenu.  The popup menu comes up fine when I right mouse click and
go does correctly if I click anywhere inside the Swing component but
DOESN"T dissapear when I click on an SWT appear of the application.
>From what I've read I'm doing it correctly.  Is this a bug in
Eclipse/SWT?  I'm using the Eclipse 3.2.1 and the associated SWT 3.2.1.

Here's a simple block of code that can be used to reproduce the
problem.  Am I doing something wrong?  Or do I have to manually code
the popdown of the Swing JPopupMenu from the SWT thread?

/*
 * Created on 20-Apr-06
 *
 */
package mine.app;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;

public class SWTAWTTest
{
	public static void main(String[] args)
	{
		Display swtDisplay = new Display();
		Shell swtShell = new Shell(swtDisplay);
		swtShell.setSize(400,200);
		swtShell.setLayout(new FillLayout());

		Label swtLabel = new Label(swtShell,SWT.NONE);
		swtLabel.setText("SWT Label");
		swtLabel.setToolTipText("SWT Label");

		Button swtButton = new Button(swtShell,SWT.NONE);
		swtButton.setText("SWT Button");
		swtButton.setToolTipText("SWT Button");

		Table swtTable = new Table(swtShell,SWT.BORDER);
		swtTable.setHeaderVisible(true);
		swtTable.setLinesVisible(true);
		swtTable.setToolTipText("SWT Table");

		Composite swtComposite = new Composite(swtShell,SWT.NO_BACKGROUND |
SWT.EMBEDDED);
		Frame swingFrame = SWT_AWT.new_Frame(swtComposite);
		final JTable swingTable = new JTable(5,5);

		swingTable.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e)
			{
				if (e.getButton() != 3)
					return;

				JPopupMenu popup = new JPopupMenu();
				JMenuItem menuItem = new JMenuItem("Select me");
				menuItem.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent e)
					{
					}
				});
				popup.add(menuItem);
				popup.show(swingTable,e.getX(),e.getY());
			}
		});


		JScrollPane scrollPane = new JScrollPane(swingTable);
		swingFrame.add(scrollPane);

		swtShell.open();
		while (!swtShell.isDisposed())
		{
			if (!swtDisplay.readAndDispatch())
				swtDisplay.sleep();
				
		}
		
		swtDisplay.dispose();
	}

}

---
 * Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24

Back to comp.lang.java.gui | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Swing embedded in SWT JPo "rjkoop" <rjkoop@THRWHITE.remove-dii-this> - 2011-04-27 15:28 +0000
  Re: Swing embedded in SWT "Richard" <richard@THRWHITE.remove-dii-this> - 2011-04-27 15:28 +0000

csiph-web