Я пытаюсь нарисовать график, используя 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();
}
}
На самом деле это не позволяет мне нарисовать график на композите. , если вместо этого я создаю новую оболочку (с FillLayout) внутри слушателя, график отображает ... Я также попытался использовать Canvas, но без результата. На самом деле я не хочу создавать новую оболочку, потому что она открывает новое окно. –