Java/SWT JFace Eclipse

Материал из Java эксперт

Перейти к: навигация, поиск

Demonstrates FontMetrics and extents

//Send questions, comments, bug reports, etc. to the authors:
//Rob Warner (rwarner@interspatial.ru)
//Robert Harris (rbrt_harris@yahoo.ru)
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
/**
 * This class demonstrates FontMetrics and extents
 */
public class Extents {
  // The string to display
  private static final String STRING = "Go Celtics!";
  // The size options for the combo
  private static final String[] SIZES = { "8", "10", "12", "14", "16", "18"};
  // The font used to draw the string
  private Font font;
  /**
   * Runs the application
   */
  public void run() {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setText("Extents");
    createContents(shell);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    if (font != null) font.dispose();
    display.dispose();
  }
  /**
   * Creates the main window"s contents
   * 
   * @param shell the main window
   */
  private void createContents(final Shell shell) {
    // Create a canvas to draw on
    final Canvas canvas = new Canvas(shell, SWT.NONE);
    // Add a listener to the shell to resize the canvas to fill the window
    // any time the window is resized
    shell.addControlListener(new ControlAdapter() {
      public void controlResized(ControlEvent event) {
        canvas.setBounds(shell.getClientArea());
      }
    });
    // Add a listener to the canvas. This is where we draw the text.
    canvas.addPaintListener(new PaintListener() {
      public void paintControl(PaintEvent event) {
        // Set the font into the gc
        event.gc.setFont(font);
        // Calcalute the width (nad height) of the string
        Point pt = event.gc.stringExtent(STRING);
        // Figure out how big our drawing area is
        Rectangle rect = canvas.getBounds();
        // Calculate the height of the font. We could have used pt.y,
        // but this demonstrates FontMetrics
        int height = event.gc.getFontMetrics().getHeight();
        // Outside loop goes from the top of the window to the bottom.
        // Since the (x, y) passed to drawString represents the upper left
        // corner, subtract the height of the font from the height of the
        // drawing area, so we don"t have any partial drawing.
        for (int i = 0, n = rect.height - height; i < n; i += height) {
          // Inside loop goes from the left to the right, stopping far enough
          // from the right to ensure no partial string drawing.
          for (int j = 0, m = rect.width - pt.x; j < m; j += pt.x) {
            // Draw the string
            event.gc.drawString(STRING, j, i);
          }
        }
      }
    });
    // Create an editor to house the dropdown
    ControlEditor editor = new ControlEditor(canvas);
    // Create the combo and fill it
    final Combo combo = new Combo(canvas, SWT.READ_ONLY);
    for (int i = 0, n = SIZES.length; i < n; i++) {
      combo.add(SIZES[i]);
    }
    // Set up the editor
    editor.horizontalAlignment = SWT.CENTER;
    editor.verticalAlignment = SWT.TOP;
    Point size = combo.ruputeSize(SWT.DEFAULT, SWT.DEFAULT);
    editor.minimumWidth = size.x;
    editor.minimumHeight = size.y;
    editor.setEditor(combo);
    // Add a listener to the combo, so that when the selection changes,
    // we change the font and redraw the canvas
    combo.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        if (font != null) font.dispose();
        font = new Font(shell.getDisplay(), "Helvetica", new Integer(combo
            .getText()).intValue(), SWT.BOLD);
        canvas.redraw();
      }
    });
    // Select the first item in the combo
    combo.select(0);
  }
  /**
   * The application entry point
   * 
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    new Extents().run();
  }
}





Font: create a large font for use by a text widget

/*
 * Font example snippet: create a large font for use by a text widget
 *
 * For a list of all SWT example snippets see
 * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets
 */
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class Snippet100 {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setBounds(10, 10, 200, 200);
    Text text = new Text(shell, SWT.MULTI);
    text.setBounds(10, 10, 150, 150);
    Font initialFont = text.getFont();
    FontData[] fontData = initialFont.getFontData();
    for (int i = 0; i < fontData.length; i++) {
      fontData[i].setHeight(24);
    }
    Font newFont = new Font(display, fontData);
    text.setFont(newFont);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    newFont.dispose();
    display.dispose();
  }
}





SWT Font Registry Example

/******************************************************************************
 * Copyright (c) 1998, 2004 Jackwind Li Guojie
 * All right reserved. 
 * 
 * Created on Jan 8, 2004 3:09:29 PM by JACK
 * $Id$
 * 
 * visit: http://www.asprise.ru/swt
 *****************************************************************************/
 
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class FontRegistryExample {
  Display display = new Display();
  Shell shell = new Shell(display);
 
  FontRegistry fontRegistry;
  public FontRegistryExample() {
    init();
    shell.pack();
    shell.open();
    //textUser.forceFocus();
    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
        display.sleep();
      }
    }
    display.dispose();
  }
  private void init() {
    shell.setLayout(new GridLayout(2, false));
 
    fontRegistry = new FontRegistry(display);
 
    fontRegistry.put("button-text", new FontData[]{new FontData("Arial", 9, SWT.BOLD)} );
    fontRegistry.put("code", new FontData[]{new FontData("Courier New", 10, SWT.NORMAL)});
 
    Text text = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.WRAP);
    text.setFont(fontRegistry.get("code"));
    text.setForeground(display.getSystemColor(SWT.COLOR_BLUE));
    text.setText("public static void main() {\n\tSystem.out.println(\"Hello\"); \n}");
    GridData gd = new GridData(GridData.FILL_BOTH);
    gd.horizontalSpan = 2;
    text.setLayoutData(gd);
 
    Button executeButton = new Button(shell, SWT.PUSH);
    executeButton.setText("Execute");
    executeButton.setFont(fontRegistry.get("button-text"));
 
    Button cancelButton = new Button(shell, SWT.PUSH);
    cancelButton.setText("Cancel");
    cancelButton.setFont(fontRegistry.get("button-text"));
 
 
  }
  public static void main(String[] args) {
    new FontRegistryExample();
  }
}