Рисование графика с использованием ZEST framework при нажатии кнопки, не работает? - PullRequest
1 голос
/ 29 января 2012

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

1) Оболочка установлена ​​на 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 Ответ

1 голос
/ 30 января 2012

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

...