1

JAVA で ZEST フレームワークを使用してグラフを描画しようとしています。コードの意図する作業は次のとおりです。

1) シェルは FormLayout に設定されています。
2) FormData のカスタマイズを使用して、ラベル、テキスト ボックス、およびボタンを追加しました。
3) ボタンの右側にコンポジットを追加しました (境界線のあるもの)。
4) ボタンにリスナーを追加しました。
5) ボタンが押されると、"Rock"、"Paper"、および Scissors の 3 つのノードを持つグラフが、ボタンの右側のコンポジット上に作成されます。(コンポジットのみに限定)。

しかし、グラフが表示されません。

バグを見つけるのを手伝ってください。前もって感謝します。

    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();
        }


    }
4

1 に答える 1

1

問題は、グラフが FillLayout でのみ描画できるという事実にあると思います。でわかるように、FormLayout ではなく、FillLayout を使用しています。

于 2012-01-29T23:18:02.990 に答える