Java/SWT JFace Eclipse

Материал из Java эксперт
Перейти к: навигация, поиск

Demonstrates FontMetrics and extents

   <source lang="java">

//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();
 }

}


      </source>
   
  
 
  



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

   <source lang="java">

/*

* 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();
 }

}

      </source>
   
  
 
  



SWT Font Registry Example

   <source lang="java">

/******************************************************************************

* 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();
 }

}


      </source>