Java Tutorial/SWT
Версия от 17:44, 31 мая 2010;  (обсуждение)
- ApplicationWindow
 - Browser
 - BusyIndicator
 - Button
 - Button Event
 - CLabel
 - CTabFolder
 - CTabItem
 - Canvas
 - Caret
 - Clipboard
 - ColorDialog
 - Combo
 - Combo Event
 - CommonDialog
 - Composite
 - ControlEditor
 - CoolBar
 - CoolItem
 - Custom Layout
 - DateTime
 - Decorations
 - Device
 - Dialog
 - DirectoryDialog
 - Display
 - ExpandBar
 - File Tree
 - FileDialog
 - FillLayout
 - FocusEvent
 - FormLayout
 - GridData
 - GridLayout
 - Group
 - ImageRegistry
 - JFace Introduction
 - KeyEvent
 - Label
 - Layout Basics
 - Link
 - List
 - List Event
 - Menu
 - MenuEvent
 - MenuItem
 - MenuItem Event
 - MessageBox
 - MouseEvent
 - PasswordField
 - PopupList
 - PopupMenu
 - PrintDialog
 - PrinterData
 - Program
 - ProgressBar
 - RowLayout
 - SWT AWT Swing
 - SWT Basics
 - SWT Color
 - SWT Cursor
 - SWT Drag Drop
 - SWT Event
 - SWT Image
 - SWT NO Layout
 - SWT Thread
 - SWT Timer
 - Sash
 - Sash Event
 - SashForm
 - Scale
 - Screen Capture
 - ScrollBar
 - ScrollBar Event
 - ScrolledComposite
 - Separator
 - Shell
 - Shell Event
 - Slider
 - Slider Event
 - Spinner
 - Spinner Event
 - Splash Screen
 - StackLayout
 - StyledText
 - StyledText Action
 - StyledText Event
 - StyledText Format
 - StyledText LineStyle
 - StyledText Style
 - System Tray
 - TabFolder
 - TabItem
 - TabSequence
 - Table
 - Table Cursor
 - Table Editor
 - Table Event
 - Table Renderer
 - Table Sort
 - TableColumn
 - TableItem
 - Text
 - Text Event
 - TextLayout
 - ToolBar
 - ToolItem
 - ToolTip
 - Tooltip Balloon
 - Tracker
 - Tree
 - Tree Editor
 - Tree Event
 - TreeColumn TreeTable
 - TreeItem
 - TreeViewer
 - UI Auto
 - ViewForm
 - WIN32
 - Widget
 - WindowManagers
 
Содержание
17. Choosing a Font
SWT provides the FontDialog class to display the common font selection dialog. FontDialog"s open() method returns a FontData object (or null if the user cancels the dialog), which you can use to create a Font.
SWT uses two classes to represent fonts:
- Font represents the onscreen font, and
 - Font objects represent operating system resources, and you must dispose any you create.
 - FontData represents the data used to construct the onscreen font.
 - FontData objects contain only data, and aren"t operating system resources, so they aren"t disposed.
 
   
   
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Shell;
public class FontSelectionDialogDisplay {
  public static void main(String[] args) {
    Display display = new Display();
    final Shell shell = new Shell(display);
    FontDialog dlg = new FontDialog(shell);
    FontData fontData = dlg.open();
    if (fontData != null) {
      Font font = new Font(shell.getDisplay(), fontData);
      font.dispose();
    }
    
    display.dispose();
  }
}
   
   
Caution: Don"t dispose a font while your application is still using it.
17. Construct a FontData object
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class FontDataConstruct {
  public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Canvas Example");
    shell.setLayout(new FillLayout());
    Canvas canvas = new Canvas(shell, SWT.NONE);
    canvas.addPaintListener(new PaintListener() {
      public void paintControl(PaintEvent e) {
        
        Font font = new Font(shell.getDisplay(), new FontData("Helvetica", 18, SWT.NORMAL));
        e.gc.setFont(font);
        e.gc.drawText("My Text", 0, 0);
        font.dispose();
      }
    });
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
}
   
   
Create Larger Font
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 FontLargerCreate {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    Text text = new Text(shell, SWT.MULTI|SWT.BORDER);
    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();
  }
}
   
   
17. To use the font selection dialog to change both the font and the color of a label
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FontDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class FontDialogColorFontData {
  public static void main(String[] args) {
    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("Font Chooser");
    shell.setLayout(new GridLayout(2, false));
    final Label fontLabel = new Label(shell, SWT.NONE);
    fontLabel.setText("The selected font");
    Button button = new Button(shell, SWT.PUSH);
    button.setText("Font...");
    button.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        Font font = null;
        Color color = null;
        FontDialog dlg = new FontDialog(shell);
        if (font != null)
          dlg.setFontList(fontLabel.getFont().getFontData());
        if (color != null)
          dlg.setRGB(color.getRGB());
        if (dlg.open() != null) {
          if (font != null)
            font.dispose();
          if (color != null)
            color.dispose();
          font = new Font(shell.getDisplay(), dlg.getFontList());
          fontLabel.setFont(font);
          color = new Color(shell.getDisplay(), dlg.getRGB());
          fontLabel.setForeground(color);
          shell.pack();
          if (font != null)
            font.dispose();
          if (color != null)
            color.dispose();
        }
      }
    });
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
}
   
   
17. Using the FontRegistry
- FontData class is a lightweight class describing system fonts.
 - A FontData to a Font is analogous to an ImageDescriptor to an Image.
 - A FontData class describes the following properties of a Font:
 
- name
 - height
 - style: combination of SWT.NORMAL, SWT.ITALIC, and SWT.BOLD
 
The Font itself is resource-based, i.e., if you create it, you must dispose of it. You can use FontRegistry to manage allocation and disposal of the fonts.
   
   
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 FontRegistry {
  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell();
    shell.setLayout(new GridLayout(1, false));
    FontRegistry 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("");
    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"));
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
}