1

我正在尝试使用 JAVA 中的 ZEST 框架绘制图表。代码的预期工作如下:

1)Shell设置为FormLayout。
2) 使用 FormData 自定义添加了标签、文本框和按钮。
3)在按钮右侧(有边框的那个)添加了一个合成。
4) 为按钮添加了监听器
5) 按下按钮时,应在按钮右侧的合成上创建一个包含三个节点“Rock”、“Paper”和 Scissors 的图形。(仅限于复合材料)。

但是图表没有显示出来。

请帮助我找出错误。提前致谢。

    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 上绘制。正如您在示例中看到的,它们使用的是 FillLayout,而不是 FormLayout。

于 2012-01-29T23:18:02.990 回答