java - 按下按钮时使用 ZEST 框架绘制图形不起作用?

标签 java swt code-snippets zest

我正在尝试使用 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();
        }


    }

最佳答案

我认为问题在于图形只能在 FillLayout 上绘制。正如您在 example 中看到的那样,他们使用FillLayout,而不是FormLayout。

关于java - 按下按钮时使用 ZEST 框架绘制图形不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9055736/

相关文章:

java - 我有一个有效的算法来找到数百万数组中的最大整数,需要关于这两个的建议

JavaFx 在 Raspberry Pi 上非常慢

java - SWT 文本中上下文菜单的子菜单

java - Paypal 在 Wicket 应用程序中的 IPN

swt - SWT 组合的默认值/项目

java - 防止下拉列表选项在 SWT 中的 Windows 上滚动

wordpress - Woocommerce 按类别隐藏价格 + is_product_category()、is_shop()

vb.net - 如何在 VB.NET 中完成 Visual Studio 代码段?

orchardcms - Orchard CMS 参数化片段 list 文件

java - 通过超链接隐藏值