2012-01-29 4 views
1

Я пытаюсь нарисовать график, используя ZEW в JAVA. Предложенная работа кода выглядит следующим образом:Графический рисунок с использованием рамки ZEST при нажатии кнопки, не работает?

1) Shell установлен в FormLayout.
2) Добавлена ​​метка, текстовое поле и кнопка с использованием настройки FormData.
3) Добавлена ​​композиция справа от кнопки (одна с рамкой).
4) Добавлен прослушиватель кнопки
5) Когда кнопка нажата, на композите справа от кнопки должен быть создан график с тремя узлами «Рок», «Бумага» и «Ножницы». (ограничивается только композитом).

Но график не отображается.

Пожалуйста, помогите мне узнать об ошибке. Спасибо заранее.

import java.io.FileNotFoundException; 
    import java.io.IOException; 

    import org.eclipse.swt.SWT; 
    import org.eclipse.swt.events.DisposeEvent; 
    import org.eclipse.swt.events.DisposeListener; 
    import org.eclipse.swt.graphics.Font; 
    import org.eclipse.swt.graphics.FontData; 
    import org.eclipse.swt.layout.FormAttachment; 
    import org.eclipse.swt.layout.FormData; 
    import org.eclipse.swt.layout.FormLayout; 
    import org.eclipse.swt.widgets.Button; 
    import org.eclipse.swt.widgets.Composite; 
    import org.eclipse.swt.widgets.Display; 
    import org.eclipse.swt.widgets.Event; 
    import org.eclipse.swt.widgets.Label; 
    import org.eclipse.swt.widgets.Listener; 
    import org.eclipse.swt.widgets.Shell; 
    import org.eclipse.swt.widgets.Text; 
    import org.eclipse.zest.core.widgets.Graph; 
    import org.eclipse.zest.core.widgets.GraphConnection; 
    import org.eclipse.zest.core.widgets.GraphNode; 
    import org.eclipse.zest.layouts.LayoutStyles; 
    import org.eclipse.zest.layouts.algorithms.SpringLayoutAlgorithm; 

    public class Demo{ 
     public static void main(String[] args) throws FileNotFoundException, IOException { 
      Display display = new Display(); 
      final Shell shell = new Shell(display); 
      shell.setText("Demo Map"); 

      FormLayout formLayout= new FormLayout(); 
      shell.setLayout(formLayout); 

      //Label 
      Label label = new Label(shell, SWT.NONE); 
      label.setText("TEXT:"); 
      FontData[] fontData = label.getFont().getFontData(); 
      for(int i = 0; i < fontData.length; ++i) 
       fontData[i].setHeight(12); 

      final Font newFont = new Font(display, fontData); 
      label.setFont(newFont); 
      FormData formData= new FormData(); 
      formData.top= new FormAttachment(0, 6); 
      formData.left= new FormAttachment(0,5); 
      label.setLayoutData(formData); 

      //Listener for font object(we created it, so we dispose it) 
      label.addDisposeListener(new DisposeListener() { 
       public void widgetDisposed(DisposeEvent e) { 
        newFont.dispose(); 
       } 
      }); 

      //Text BOX 

      final Text textBox= new Text(shell, SWT.NONE); 
      FormData textData = new FormData(); 
      textData.top= new FormAttachment(0, 8); 
      textData.left= new FormAttachment(label, 10); 
      textData.height= 20; 
      textData.width= 200; 
      textBox.setFont(newFont); 
      textBox.setLayoutData(textData); 

      //Button 

      Button button = new Button(shell, SWT.PUSH); 
      button.setText("Enter"); 
      FormData buttonData= new FormData(); 
      buttonData.top= new FormAttachment(0,5); 
      buttonData.left= new FormAttachment(textBox, 10); 
      buttonData.height= 25; 
      buttonData.width=50; 
      button.setLayoutData(buttonData); 


      //Composite to hold the graph visual 

      final Composite composite = new Composite(shell, SWT.BORDER); 
      FormData compositeFormData= new FormData(); 
      compositeFormData.top = new FormAttachment(0,5); 
      compositeFormData.left = new FormAttachment(button,15); 
      compositeFormData.right= new FormAttachment(100,-10); 
      compositeFormData.bottom= new FormAttachment(100,-10); 
      composite.setLayoutData(compositeFormData); 


      //drawNodes on button press 
      button.addListener(SWT.Selection, new Listener() { 
       public void handleEvent(Event e) { 
        switch (e.type) { 
        case SWT.Selection: 
        System.out.println("Button pressed"); 
        Graph g = new Graph(composite, SWT.NONE); 
        GraphNode n = new GraphNode(g, SWT.NONE, "Paper"); 
        GraphNode n2 = new GraphNode(g, SWT.NONE, "Rock"); 
        GraphNode n3 = new GraphNode(g, SWT.NONE, "Scissors"); 
        new GraphConnection(g, SWT.NONE, n, n2); 
        new GraphConnection(g, SWT.NONE, n2, n3); 
        new GraphConnection(g, SWT.NONE, n3, n); 
        g.setLayoutAlgorithm(new SpringLayoutAlgorithm(LayoutStyles.NO_LAYOUT_NODE_RESIZING), true); 
        break; 
        } 
       } 
       }); 



      shell.open(); 
      while(!display.isDisposed()){ 
       if(!display.readAndDispatch()){ 
        display.sleep(); 
       } 
      } 
      display.dispose(); 
     } 


    } 

ответ

1

Я думаю, проблема заключается в том, что диаграммы могут быть нарисованы только на FillLayout. Как вы можете видеть в example, они используют FillLayout, а не FormLayout.

+0

На самом деле это не позволяет мне нарисовать график на композите. , если вместо этого я создаю новую оболочку (с FillLayout) внутри слушателя, график отображает ... Я также попытался использовать Canvas, но без результата. На самом деле я не хочу создавать новую оболочку, потому что она открывает новое окно. –