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
>>>
>>
>>
>

Reply via email to