Control: set a background image (a dynamic gradient) : Widget « SWT « Java Tutorial






Control: set a background image (a dynamic gradient)
/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*
 * Control example snippet: set a background image (a dynamic gradient)
 * 
 * For a list of all SWT example snippets see
 * http://www.eclipse.org/swt/snippets/
 * 
 * @since 3.2
 */
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class BackgroundImageControl {
  static Image oldImage;

  public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setBackgroundMode(SWT.INHERIT_DEFAULT);
    FillLayout layout1 = new FillLayout(SWT.VERTICAL);
    layout1.marginWidth = layout1.marginHeight = 10;
    shell.setLayout(layout1);
    Group group = new Group(shell, SWT.NONE);
    group.setText("Group ");
    RowLayout layout2 = new RowLayout(SWT.VERTICAL);
    layout2.marginWidth = layout2.marginHeight = layout2.spacing = 10;
    group.setLayout(layout2);
    for (int i = 0; i < 8; i++) {
      Button button = new Button(group, SWT.RADIO);
      button.setText("Button " + i);
    }
    shell.addListener(SWT.Resize, new Listener() {
      public void handleEvent(Event event) {
        Rectangle rect = shell.getClientArea();
        Image newImage = new Image(display, Math.max(1, rect.width), 1);
        GC gc = new GC(newImage);
        gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
        gc.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
        gc.fillGradientRectangle(rect.x, rect.y, rect.width, 1, false);
        gc.dispose();
        shell.setBackgroundImage(newImage);
        if (oldImage != null)
          oldImage.dispose();
        oldImage = newImage;
      }
    });
    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    if (oldImage != null)
      oldImage.dispose();
    display.dispose();
  }
}








17.2.Widget
17.2.1.Set Control SizeSet Control Size
17.2.2.The Widget Class
17.2.3.Get Widget StyleGet Widget Style
17.2.4.Widget can be disposed: addDisposeListener(DisposeListener listener)Widget can be disposed: addDisposeListener(DisposeListener listener)
17.2.5.Control Size and locationControl Size and location
17.2.6.Set BoundsSet Bounds
17.2.7.Set Location and SizeSet Location and Size
17.2.8.Control: set a background image (a dynamic gradient)Control: set a background image (a dynamic gradient)
17.2.9.Inherit a background color or imageInherit a background color or image
17.2.10.Setting Widget boundsSetting Widget bounds
17.2.11.Compute Widget SizeCompute Widget Size
17.2.12.Get Preferred sizeGet Preferred size
17.2.13.Relative position to ControlRelative position to Control
17.2.14.Relative position to DisplayRelative position to Display
17.2.15.Add ControlListener to controlAdd ControlListener to control