Re: tabbed panes

Hi Adele,

Have a look at this web page, in particular *"5. How do I use Canvas3D's in JTabbedPane?*" at http://www.j3d.org/faq/swing.html.

I have just added the changes to DisplayPanelJ3D and made a small change to your test program, which fixes the TabbedPane problem.
The change to DisplayPanelJ3D is the same as outlined on the j3d web page.
The change to your test is that HeatPlot.getPanel() returns display.getComponent() instead of a JPanel with the display.getComponent() added to it.

To test for yourself make the following directories under your test program directory

visad_mods\visad\java3d\DisplayPanelJ3D.java

and run the following

set classpath=.;visad_mods\;visad.jar;
javac visad_mods\visad\java3d\DisplayPanelJ3D.java
java test

from the directory you have test.java

It works on my computer. If you have any problems let me know.

Good luck.
Luke.

---
Luke Matthews
Bureau of Meteorology, Australia
l.matthews *AT* bom.gov.au


Curtis Rueden wrote:

Hi Adele,

I am not certain what is causing the tabbed pane to behave strangely. I
wonder whether Java3D in general has issues with JTabbedPane, or just VisAD.

In any case, here is an ugly hack that solves your problem for now:

 SwingUtilities.invokeLater(new Runnable() {
   public void run() {
     for (int i=tabbedPane.getTabCount()-1; i>=0; i--) {
       tabbedPane.setSelectedIndex(i);
       tabbedPane.validate();
     }
   }
 });

Put this code *after* frame.setVisible(true). You'll also need to make the
tabbedPane declaration final.

As for the issue with data extending beyond the bounding box, you can clip
that away. The following code attached to your Heatplot displays will clip
the data to inside the bounding box only:

 DisplayRendererJ3D dr = (DisplayRendererJ3D) display.getDisplayRenderer();
 dr.setClip(0, true,  1.0f,  0.0f,  0.0f, -1.01f);  // X_POS face
 dr.setClip(1, true, -1.0f,  0.0f,  0.0f, -1.01f);  // X_NEG face
 dr.setClip(2, true,  0.0f,  1.0f,  0.0f, -1.01f);  // Y_POS face
 dr.setClip(3, true,  0.0f, -1.0f,  0.0f, -1.01f);  // Y_NEG face
 dr.setClip(4, true,  0.0f,  0.0f,  1.0f, -1.01f);  // Z_POS face
 dr.setClip(5, true,  0.0f,  0.0f, -1.0f, -1.01f);  // Z_NEG face

Hope that helps.
-Curtis

At 02:50 PM 2/2/2004, Adele Cutler wrote:

Hi,

I'm using visad from the current visad.jar file, with j2sdk1.4.1_02 and
java3d-1_3_1-windows-i586-opengl-sdk. I'm having 2 difficulties with which I
would appreciate help/advice.

1. When I set up a tabbed pane, only the last-added tab is shown, even when
I use setSelectedIndex:

      JTabbedPane tabbedPane = new JTabbedPane();
      tabbedPane.addTab("pane1", pane1);
      tabbedPane.addTab("pane2", pane2);
      tabbedPane.addTab("pane3", pane3);
      tabbedPane.addTab("pane4", pane4);
      int is = tabbedPane.indexOfTab("pane1");
      tabbedPane.setSelectedIndex(is);

pane4 is the one I see. If I click on the pane4 tab, I can then click on the
first 3 tabs and see the correct images. I did read the tabbed pane postings
on the visad archive, which seemed to say the tabbed pane problem was
solved - I'm sorry, but I don't understand the details of those postings
well enough to fix my code. Can anyone help?

2. In a simple 2D plot, the image plots outside the axes (I also have an
older version of visAD, dated about a year ago, and this does not happen
with that version).

Both of these can be seen in a simplified version of my app, which I have
attached.

Thanks for any help you can provide.

Adele