Java Tutorial/SWT/CoolBar

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

Add Button and Combo to a CoolBar

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.rubo; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class CoolBarComboButton {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   CoolBar bar = new CoolBar(shell, SWT.BORDER);
   CoolItem item = new CoolItem(bar, SWT.NONE);
   Button button = new Button(bar, SWT.PUSH);
   button.setText("Button ");
   Point size = button.ruputeSize(SWT.DEFAULT, SWT.DEFAULT);
   item.setPreferredSize(item.ruputeSize(size.x, size.y));
   item.setControl(button);
   item = new CoolItem(bar, SWT.NONE);
   Combo combo = new Combo(bar, SWT.NONE);
   size = combo.ruputeSize(SWT.DEFAULT, SWT.DEFAULT);
   item.setPreferredSize(item.ruputeSize(size.x, size.y));
   item.setControl(combo);
   
   
   bar.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}</source>





Add ToolBar to CoolBar

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class CoolBarToolBar {

 public static void main(String[] args) {
   Display display = new Display();
   Shell shell = new Shell(display);
   CoolBar coolBar = new CoolBar(shell, SWT.BORDER);
   coolBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
   final CoolItem item = new CoolItem(coolBar, SWT.DROP_DOWN);
   item.setControl(createToolBar(coolBar));


   Control control = item.getControl();
   Point pt = control.ruputeSize(SWT.DEFAULT, SWT.DEFAULT);
   pt = item.ruputeSize(pt.x, pt.y);
   item.setSize(pt);    
   
   coolBar.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }
 private static Control createToolBar(Composite composite) {
   ToolBar toolBar = new ToolBar(composite, SWT.NONE);
   ToolItem item = new ToolItem(toolBar, SWT.PUSH);
   item.setText("circle");
   item = new ToolItem(toolBar, SWT.PUSH);
   item.setText("square");
   item = new ToolItem(toolBar, SWT.PUSH);
   item.setText("star");
   item = new ToolItem(toolBar, SWT.PUSH);
   item.setText("triangle");
   return toolBar;
 }

}</source>





CoolBar: drop-down a chevron menu containing hidden tool items

   <source lang="java">

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

* Copyright (c) 2000, 2004 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
*******************************************************************************/

/*

* CoolBar example snippet: drop-down a chevron menu containing hidden tool items
*
* For a list of all SWT example snippets see
* http://www.eclipse.org/swt/snippets/
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class ChevronMenuHiddenToolItems {

 static Display display;
 static Shell shell;
 static CoolBar coolBar;
 static Menu chevronMenu = null;
 public static void main(String[] args) {
   display = new Display();
   shell = new Shell(display);
   shell.setLayout(new GridLayout());
   coolBar = new CoolBar(shell, SWT.FLAT | SWT.BORDER);
   coolBar.setLayoutData(new GridData(GridData.FILL_BOTH));
   ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT | SWT.WRAP);
   int minWidth = 0;
   for (int j = 0; j < 5; j++) {
     int width = 0;
     ToolItem item = new ToolItem(toolBar, SWT.PUSH);
     item.setText("B" + j);
     width = item.getWidth();
     /* find the width of the widest tool */
     if (width > minWidth)
       minWidth = width;
   }
   CoolItem coolItem = new CoolItem(coolBar, SWT.DROP_DOWN);
   coolItem.setControl(toolBar);
   Point size = toolBar.ruputeSize(SWT.DEFAULT, SWT.DEFAULT);
   Point coolSize = coolItem.ruputeSize(size.x, size.y);
   coolItem.setMinimumSize(minWidth, coolSize.y);
   coolItem.setPreferredSize(coolSize);
   coolItem.setSize(coolSize);
   coolItem.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       if (event.detail == SWT.ARROW) {
         CoolItem item = (CoolItem) event.widget;
         Rectangle itemBounds = item.getBounds();
         Point pt = coolBar.toDisplay(new Point(itemBounds.x, itemBounds.y));
         itemBounds.x = pt.x;
         itemBounds.y = pt.y;
         ToolBar bar = (ToolBar) item.getControl();
         ToolItem[] tools = bar.getItems();
         int i = 0;
         while (i < tools.length) {
           Rectangle toolBounds = tools[i].getBounds();
           pt = bar.toDisplay(new Point(toolBounds.x, toolBounds.y));
           toolBounds.x = pt.x;
           toolBounds.y = pt.y;
           /*
            * Figure out the visible portion of the tool by looking at the
            * intersection of the tool bounds with the cool item bounds.
            */
           Rectangle intersection = itemBounds.intersection(toolBounds);
           /*
            * If the tool is not completely within the cool item bounds, then
            * it is partially hidden, and all remaining tools are completely
            * hidden.
            */
           if (!intersection.equals(toolBounds))
             break;
           i++;
         }
         /* Create a menu with items for each of the completely hidden buttons. */
         if (chevronMenu != null)
           chevronMenu.dispose();
         chevronMenu = new Menu(coolBar);
         for (int j = i; j < tools.length; j++) {
           MenuItem menuItem = new MenuItem(chevronMenu, SWT.PUSH);
           menuItem.setText(tools[j].getText());
         }
         /* Drop down the menu below the chevron, with the left edges aligned. */
         pt = coolBar.toDisplay(new Point(event.x, event.y));
         chevronMenu.setLocation(pt.x, pt.y);
         chevronMenu.setVisible(true);
       }
     }
   });
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}</source>





Create a coolbar (relayout when resized)

   <source lang="java">

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

* Copyright (c) 2000, 2004 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
*******************************************************************************/

/*

* CoolBar example snippet: create a coolbar (relayout when resized)
*
* For a list of all SWT example snippets see
* http://www.eclipse.org/swt/snippets/
* 
* @since 3.0
*/

import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class CoolBarRelayoutResize {

 static int itemCount;
 static CoolItem createItem(CoolBar coolBar, int count) {
   ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT);
   for (int i = 0; i < count; i++) {
     ToolItem item = new ToolItem(toolBar, SWT.PUSH);
     item.setText(itemCount++ + "");
   }
   toolBar.pack();
   Point size = toolBar.getSize();
   CoolItem item = new CoolItem(coolBar, SWT.NONE);
   item.setControl(toolBar);
   Point preferred = item.ruputeSize(size.x, size.y);
   item.setPreferredSize(preferred);
   return item;
 }
 public static void main(String[] args) {
   Display display = new Display();
   final Shell shell = new Shell(display);
   CoolBar coolBar = new CoolBar(shell, SWT.NONE);
   createItem(coolBar, 3);
   createItem(coolBar, 2);
   createItem(coolBar, 3);
   createItem(coolBar, 4);
   int style = SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL;
   Text text = new Text(shell, style);
   FormLayout layout = new FormLayout();
   shell.setLayout(layout);
   FormData coolData = new FormData();
   coolData.left = new FormAttachment(0);
   coolData.right = new FormAttachment(100);
   coolData.top = new FormAttachment(0);
   coolBar.setLayoutData(coolData);
   coolBar.addListener(SWT.Resize, new Listener() {
     public void handleEvent(Event event) {
       shell.layout();
     }
   });
   FormData textData = new FormData();
   textData.left = new FormAttachment(0);
   textData.right = new FormAttachment(100);
   textData.top = new FormAttachment(coolBar);
   textData.bottom = new FormAttachment(100);
   text.setLayoutData(textData);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch())
       display.sleep();
   }
   display.dispose();
 }

}</source>





Creating Coolbars

SWT uses two classes to implement coolbars: CoolBar and CoolItem. You must size the CoolItem yourself, or it won"t be sized properly.