Dear Robert,

Thank you for the reply. I understand that I can call  
viewer.loadInline() after the component is constructed... However, I  
don't like this :)
I would like to design a component (JComponent), which takes a  
structure (as String) in a constructor parameter and shows the  
structure in 3D.

JComponent threeDcomponent = new MyThreeDComponent(myStructure);

In Swing, I think this is a common approach. For example:

JComponent labelComponent = new JLabel(myText);

or

JComponent tableComponent = new JTable(myData, columnNames);

However, with Jmol 11.8 designing such component is impossible.
I will always have to write

JComponent threeDcomponent = new MyThreeDComponent();
((MyThreeDComponent ) threeDcomponent).loadStructure(myStructure);

So, even though this is not a huge problem, I believe it should be  
changed.
Or is there any practical reason why model should not be created  
before the component is shown?

Best,

Tomas



On Dec 11, 2009, at 11:50 AM, Robert Hanson wrote:

> Tomas, you are absolutely correct. You are trying to create a model  
> before the frame is defined. That's just not possible, and if it was  
> in some distant past, it shouldn't have been. Here's (in my mind) a  
> more logical construction of events. In this way there is no model  
> during construction, and the repaint is not fired until after Test()  
> is initialized. There were some changes between 11.6 and 11.8 which  
> relate to this, but I would argue it's not a bug.
>
> package org.jmol;
>
> import java.awt.Dimension;
> import java.awt.Graphics;
> import java.awt.Rectangle;
> import javax.swing.JFrame;
> import javax.swing.JPanel;
> import org.jmol.adapter.smarter.SmarterJmolAdapter;
> import org.jmol.api.JmolAdapter;
> import org.jmol.api.JmolViewer;
>
> public class Test extends JPanel {
>
>   // Main application
>   public static void main(String[] args) {
>     (new Test()).viewer.loadInline(strXyzHOH);
>   }
>
>   public Test() {
>     adapter = new SmarterJmolAdapter();
>     viewer = JmolViewer.allocateViewer(this, adapter);
>     JFrame newFrame = new JFrame();
>     newFrame.getContentPane().add(this);
>     newFrame.setSize(300, 300);
>     newFrame.setVisible(true);
>   }
>
>   private final static String strXyzHOH = "3\nwater\nO  0.0 0.0 0.0\n"
>       + "H  0.76923955 -0.59357141 0.0\n" + "H -0.76923955  
> -0.59357141 0.0\n";
>
>   private JmolViewer viewer;
>   private JmolAdapter adapter;
>   private Dimension currentSize = new Dimension();
>   private Rectangle rectClip = new Rectangle();
>
>   public void paint(Graphics g) {
>     getSize(currentSize);
>     g.getClipBounds(rectClip);
>     viewer.renderScreenImage(g, currentSize, rectClip);
>   }
>
> }
>
>

===============================================
Tomas Pluskal
G0 Cell Unit, Okinawa Institute of Science and Technology
12-22 Suzaki, Uruma-shi, Okinawa 904-2234, JAPAN
TEL:  +81-98-921-3966




------------------------------------------------------------------------------
Return on Information:
Google Enterprise Search pays you back
Get the facts.
http://p.sf.net/sfu/google-dev2dev
_______________________________________________
Jmol-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-developers

Reply via email to