⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swtdisplay.java

📁 A framework written in Java for implementing high-level and dynamic languages, compiling them into J
💻 JAVA
字号:
package gnu.kawa.swtviews;import gnu.kawa.models.*;import org.eclipse.swt.widgets.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.SWT;import org.eclipse.swt.events.SelectionEvent;public class SwtDisplay extends gnu.kawa.models.Display{  org.eclipse.swt.widgets.Display swtDisplay;  static SwtDisplay instance;  public SwtDisplay (org.eclipse.swt.widgets.Display swtDisplay)  {    this.swtDisplay = swtDisplay;  }  public static synchronized gnu.kawa.models.Display getInstance()  {    if (instance == null)      {        instance = new SwtDisplay(new org.eclipse.swt.widgets.Display());      }    return instance;  }  public Window makeWindow ()  {    SwtWindow window = new SwtWindow(this);    window.display = this;    return window;  }  public void addBox (Box model, Object where)  {    new SwtBox(model, (Composite) where, this);  }  public void addButton (gnu.kawa.models.Button model, Object where)  {    new SwtButton(model, (Composite) where, this);  }  public void addLabel (gnu.kawa.models.Label model, Object where)  {    //new SwtLabel(model, (Composite) where, this);    org.eclipse.swt.widgets.Label swtLabel      = new org.eclipse.swt.widgets.Label((Composite) where, 0);    String text = model.getText();    if (text != null)      swtLabel.setText(text);    LabelListener listener = new LabelListener(swtLabel, model);    model.addListener(listener);    swtLabel.pack();  }  public void addImage (DrawImage model, Object where)  {    throw new Error("SwtDisplay.addImage not implemented!");  }  public void addView (Object view, Object where)  {    if (! ((Control) view).setParent((Composite) where))      throw new Error("SwtDisplay.addView not implemented!");  }}class SwtButton  implements // ModelListener,  org.eclipse.swt.events.SelectionListener{  org.eclipse.swt.widgets.Button swtButton;  gnu.kawa.models.Button model;  public SwtButton (gnu.kawa.models.Button model,                    Composite parent, SwtDisplay display)  {    this.model = model;    swtButton = new org.eclipse.swt.widgets.Button(parent, SWT.PUSH);    swtButton.setText(model.getText());    swtButton.addSelectionListener(this);    swtButton.pack();  }  public void widgetSelected(SelectionEvent e)  {    try      {        ((gnu.mapping.Procedure) model.getAction()).apply1(e);      }    catch (Throwable ex)      {	throw new gnu.mapping.WrappedException(ex);      }  }  public void widgetDefaultSelected (SelectionEvent e)  {    System.err.println("(widgetDefaultSelected invoked)");  }}/** A listener to update an SWT Label when the model has changed. */class LabelListener extends WeakListener{  public LabelListener(org.eclipse.swt.widgets.Label swtLabel,                       gnu.kawa.models.Label model)  {    super(swtLabel);  }  public void update (Object view, Model model, Object key)  {    org.eclipse.swt.widgets.Label swtLabel      = (org.eclipse.swt.widgets.Label) view;    gnu.kawa.models.Label label = (gnu.kawa.models.Label) model;    if (key == "text")      swtLabel.setText(label.getText());    swtLabel.pack(true);  }}class SwtBox extends Composite{  Box model;  public SwtBox (Box model, Composite parent, gnu.kawa.models.Display display)  {    super(parent, 0);    this.model = model;    Viewable cellSpacing = model.getCellSpacing();    int n = model.getComponentCount();    for (int i = 0;  i < n;  i++)      {        if (i > 0 && cellSpacing != null)          cellSpacing.makeView(display, this);        model.getComponent(i).makeView(display, this);      }    GridLayout layout = new GridLayout();    if (model.getAxis() == 0)      { // Row        layout.numColumns = n;      }    else      { // Column        layout.numColumns = 1;      }    layout.horizontalSpacing = layout.verticalSpacing = 0;    layout.marginWidth = layout.marginHeight = 0;    setLayout(layout);    pack();  }}class SwtWindow implements gnu.kawa.models.Window{  org.eclipse.swt.widgets.Shell shell;  SwtDisplay display;  public gnu.kawa.models.Display getDisplay () { return display; }  public SwtWindow (SwtDisplay display)  {    this.display = display;    shell = new Shell(display.swtDisplay, SWT.CLOSE|SWT.BORDER|SWT.RESIZE);  }  public String getTitle ()  {    return "(unknown title)";  // FIXME  }  public void setTitle (String title)  {    // FIXME  }  public void setMenuBar (Object menubar)  {    // FIXME  }  public void setContent (Object content)  {    if (content instanceof Viewable)      ((Viewable) content).makeView(getDisplay(), shell);    else      new Error("SwtDisplay.setContent:"+ content).printStackTrace();  }  public void open ()  {    shell.open();    while (!shell.isDisposed ())      {        if (!display.swtDisplay.readAndDispatch())          display.swtDisplay.sleep();      }    display.swtDisplay.dispose();  }  public void finalize ()  {    if (shell != null)      shell.dispose();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -