Hi Josh, thanks for sharing with us your work-in-progress ... Could you attach it in a jira issue ? So in this way we could integrate in Pivot sources in next release as a sample ...
Bye, Sandro Il 16/Giu/2016 22:05, "Josh Highley" <joshhigh...@gmail.com> ha scritto: Documenting my progress in case others need this in the future. I found the SwingDemo code in the Pivot SVN, which got me started. I ended up using a JDialog instead of JFrame because I didn't want the minimize or maximize buttons, or a separate task bar item. I'm still trying to figure some things out, mainly the simplest way to tie the JDialog's AWT events (WindowListener) to Pivots window events. I need to fire Pivot window state events so that other Pivot components are kept in sync with this dialog's window state. Also, minimizing my main application's window does not also hide this dialog. Again, need to tie events between Pivot and Swing/AWT. This code is still a work in progress. I _think_ I've removed my app-specific code, but no guarantee it will compile. import java.awt.Dimension; import java.awt.Image; import java.awt.Point; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import javax.swing.JDesktopPane; import javax.swing.JDialog; import javax.swing.JInternalFrame; import javax.swing.plaf.basic.BasicInternalFrameUI; import org.apache.pivot.beans.BXML; import org.apache.pivot.beans.BXMLSerializer; import org.apache.pivot.wtk.ApplicationContext; import org.apache.pivot.wtk.Container; import org.apache.pivot.wtk.Form; import org.apache.pivot.wtk.Window; public class MyDialog extends Window implements WindowListener { // replace the default coffee cup icon private static final Image *ICON* = new BufferedImage(1,1,BufferedImage.*TYPE_INT_ARGB_PRE*); private JDialog jDialog; public MyDialog() { super(); try { JDesktopPane desktop = new JDesktopPane(); ApplicationContext.DisplayHost displayHost = new ApplicationContext.DisplayHost(); ApplicationContext.*getDisplays*().add(displayHost .getDisplay()); jDialog = new JDialog(); jDialog.setTitle(*"My Dialog"*); jDialog.setIconImage(*ICON*); jDialog.setAlwaysOnTop(true); jDialog.addWindowListener(this); jDialog.setContentPane(desktop); jDialog.setSize(1024, 768); jDialog.setVisible(true); jDialog.setResizable(true); JInternalFrame internalFrame = new JInternalFrame("", false, false, false); internalFrame.add(displayHost); // remove the JInternalFrame border and title bar since JDialog provides this internalFrame.setBorder(null); ((BasicInternalFrameUI)internalFrame.getUI()).setNorthPane( null); desktop.add(internalFrame); // maximize our Pivot content to size it with the Swing container setMaximized(true); BXMLSerializer bxmlSerializer = new BXMLSerializer(); setContent((Container) bxmlSerializer.readObject(Container. class, "my_dialog.bxml")); bxmlSerializer.bind(this, MyDialog.class); open(displayHost.getDisplay()); internalFrame.setMaximum(true); internalFrame.setLocation(0, 0); internalFrame.setSize(desktop.getSize()); internalFrame.setVisible(true); } catch (Throwable t) { t.printStackTrace(); } } @Override public void setVisible(boolean visible) { jDialog.setVisible(visible); } private void saveSizeAndLocation() { // removed code to save preferences jDialog.getLocation()); jDialog.getSize()); } private void setSizeAndLocation() { // removed code to load preferences jFrjDialogme .setSize((Dimension)obj); jDialog.setLocation((Point)obj); } ////////////////// AWT WindowListener //////////////////// // I left println here temporarily to see what/when events are fired public void windowOpened(WindowEvent e) { System.*out*.println("MyDialog windowOpened"); setSizeAndLocation(); } public void windowClosing(WindowEvent e) { System.*out*.println("MyDialog windowClosing"); saveSizeAndLocation(); } public void windowClosed(WindowEvent e) { System.*out*.println(" MyDialog windowClosed"); } public void windowIconified(WindowEvent e) { System.*out*.println(" MyDialog windowIconified"); } public void windowDeiconified(WindowEvent e) { System.*out*.println(" MyDialog windowDeiconified"); } public void windowActivated(WindowEvent e) { System.*out*.println(" MyDialog windowActivated"); } public void windowDeactivated(WindowEvent e) { System.*out*.println(" MyDialog windowDeactivated"); } } On Fri, Jun 10, 2016 at 11:47 AM, Josh Highley <joshhigh...@gmail.com> wrote: > Is the JFrame at the application level or at each individual, drag-able, > frame level? I don't necessarily need example code if you can do a bit of > a "brain dump" with some of the trickier details. You said " new > top-level JFrame, and host the Pivot window inside that" -- how is that > relationship made? I see JFrame will give a Graphics object, and I know > Pivot components draw themselves with Graphics.... > > On Wed, Jun 8, 2016 at 10:11 PM, Roger and Beth Whitcomb < > rogerandb...@rbwhitcomb.com> wrote: > >> Hi Josh, >> >> Yes it is, but it is complicated. You basically have to create a new >> top-level JFrame, and host the Pivot window inside that, and do the message >> passing by hooking up listeners, etc. We have done it in our application, >> and I hope to be able to submit the code at some point, but it is not ready >> yet (still some proprietary bits in there still). I'm not even sure I >> could send our code to you in a way that would be helpful (i.e., that you >> could build). But what we did was based on some of the example code that >> is already there, so you could potentially reinvent it .... >> >> Let me see if I can at least point you to the example code, but it >> will have to wait until next week for me ... >> >> HTH, >> >> ~Roger >> >> >> On 6/8/16 11:27 AM, Josh Highley wrote: >> >>> Is it possible to create a non-modal frame (or similar) that can be >>> dragged outside the main application window? >>> >>> For example, I have a log console Frame and some other non-modal info >>> Frames that a user can show/hide. I want them to be able to drag it out >>> from in front of the main application window, like to another monitor. At >>> the moment, the Frames will get cutoff when they pass the edge of the >>> underlying app window. >>> >>> Thanks, >>> >>> Josh >>> >> >> >