Java/SWT JFace Eclipse/Event

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

Demonstrates ControlListeners

   <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.events.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates ControlListeners
*/

public class ControlListenerExample {

 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   Image image = new Image(display, "jexp.gif");
   createContents(shell, image);
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   if (image != null) image.dispose();
   display.dispose();
 }
 /**
  * Creates the main window"s contents
  * 
  * @param shell the main window
  * @param image the image
  */
 private void createContents(Shell shell, Image image) {
   shell.setLayout(new GridLayout());
   // Create a label to hold the image
   Label label = new Label(shell, SWT.NONE);
   label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
   label.setImage(image);
   shell.setData(label);
   // Add the listener
   shell.addControlListener(new ControlAdapter() {
     public void controlResized(ControlEvent event) {
       // Get the event source (the shell)
       Shell shell = (Shell) event.getSource();
       // Get the source"s data (the label)
       Label label = (Label) shell.getData();
       // Determine how big the shell should be to fit the image
       Rectangle rect = shell.getClientArea();
       ImageData data = label.getImage().getImageData();
       // If the shell is too small, hide the image
       if (rect.width < data.width || rect.height < data.height) {
         shell.setText("Too small.");
         label.setText("I"m melting!");
       } else {
         // He fits!
         shell.setText("Happy Guy Fits!");
         label.setImage(label.getImage());
       }
     }
   });
 }
 /**
  * Application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new ControlListenerExample().run();
 }

}


      </source>
   
  
 
  



Demonstrates FocusListener

   <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.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates FocusListener
*/

public class FocusListenerExample {

 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   // Create the shell
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setLayout(new GridLayout(3, true));
   shell.setText("One Potato, Two Potato");
   // Create the focus listener
   FocusListener listener = new FocusListener() {
     public void focusGained(FocusEvent event) {
       Button button = (Button) event.getSource();
       button.setText("I"m It!");
     }
     public void focusLost(FocusEvent event) {
       Button button = (Button) event.getSource();
       button.setText("Pick Me!");
     }
   };
   // Create the buttons and add the listener to each one
   for (int i = 0; i < 6; i++) {
     Button button = new Button(shell, SWT.PUSH);
     button.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
     button.setText("Pick Me!");
     button.addFocusListener(listener);
   }
   // Display the window
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Demonstrates LineBackgroundListeners

   <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.graphics.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates LineBackgroundListeners
*/

public class LineBackgroundListenerTest {

 // The color to use for backgrounds
 Color red;
 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   red = display.getSystemColor(SWT.COLOR_RED);
   Shell shell = new Shell(display);
   createContents(shell);
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }
 /**
  * Creates the main window"s contents
  * 
  * @param shell the main window
  */
 private void createContents(Shell shell) {
   shell.setLayout(new FillLayout());
   StyledText styledText = new StyledText(shell, SWT.BORDER);
   // Add the line background listener
   styledText.addLineBackgroundListener(new LineBackgroundListener() {
     public void lineGetBackground(LineBackgroundEvent event) {
       if (event.lineText.indexOf("SWT") > -1) {
         event.lineBackground = red;
       }
     }
   });
 }
 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new LineBackgroundListenerTest().run();
 }

}

      </source>
   
  
 
  



Demonstrates mouse events

   <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.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates mouse events
*/

public class MouseEventExample implements MouseListener, MouseMoveListener,

   MouseTrackListener {
 // The label to hold the messages from mouse events
 Label myLabel = null;
 /**
  * MouseEventExample constructor
  * 
  * @param shell the shell
  */
 public MouseEventExample(Shell shell) {
   myLabel = new Label(shell, SWT.BORDER);
   myLabel.setText("I ain"t afraid of any old mouse");
   shell.addMouseListener(this);
   shell.addMouseMoveListener(this);
   shell.addMouseTrackListener(this);
 }
 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   // Create the window
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setLayout(new GridLayout());
   shell.setSize(450, 200);
   shell.setText("Mouse Event Example");
   // Create the listener
   MouseEventExample myMouseEventExample = new MouseEventExample(shell);
   // Display the window
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }
 /**
  * Called when user double-clicks the mouse
  */
 public void mouseDoubleClick(MouseEvent e) {
   myLabel.setText("Double Click " + e.button + " at: " + e.x + "," + e.y);
 }
 /**
  * Called when user clicks the mouse
  */
 public void mouseDown(MouseEvent e) {
   myLabel.setText("Button " + e.button + " Down at: " + e.x + "," + e.y);
 }
 /**
  * Called when user releases the mouse after clicking
  */
 public void mouseUp(MouseEvent e) {
   myLabel.setText("Button " + e.button + " Up at: " + e.x + "," + e.y);
 }
 /**
  * Called when user moves the mouse
  */
 public void mouseMove(MouseEvent e) {
   myLabel.setText("Mouse Move at: " + e.x + "," + e.y);
 }
 /**
  * Called when user enters the shell with the mouse
  */
 public void mouseEnter(MouseEvent e) {
   myLabel.setText("Mouse Enter at: " + e.x + "," + e.y);
 }
 /**
  * Called when user exits the shell with the mouse
  */
 public void mouseExit(MouseEvent e) {
   myLabel.setText("Mouse Exit at: " + e.x + "," + e.y);
 }
 /**
  * Called when user hovers the mouse
  */
 public void mouseHover(MouseEvent e) {
   myLabel.setText("Mouse Hover at: " + e.x + "," + e.y);
 }

}


      </source>
   
  
 
  



Demonstrates various listeners

   <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.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates various listeners
*/

public class MultipleListenersExample implements HelpListener, VerifyListener,

   ModifyListener {
 // Constants used for conversions
 private static final double FIVE_NINTHS = 5.0 / 9.0;
 private static final double NINE_FIFTHS = 9.0 / 5.0;
 // Widgets used in the window
 private Text fahrenheit;
 private Text celsius;
 private Label help;
 /**
  * Runs the application
  */
 public void run() {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("Temperatures");
   createContents(shell);
   shell.pack();
   shell.open();
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }
 /**
  * Create the main window"s contents
  * @param shell the main window
  */
 private void createContents(Shell shell) {
   shell.setLayout(new GridLayout(3, true));
   // Create the label and input box for Fahrenheit
   new Label(shell, SWT.LEFT).setText("Fahrenheit:");
   fahrenheit = new Text(shell, SWT.BORDER);
   GridData data = new GridData(GridData.FILL_HORIZONTAL);
   data.horizontalSpan = 2;
   fahrenheit.setLayoutData(data);
   // Set the context-sensitive help
   fahrenheit.setData("Type a temperature in Fahrenheit");
   // Add the listeners
   fahrenheit.addHelpListener(this);
   fahrenheit.addVerifyListener(this);
   fahrenheit.addModifyListener(this);
   // Create the label and input box for Celsius
   new Label(shell, SWT.LEFT).setText("Celsius:");
   celsius = new Text(shell, SWT.BORDER);
   data = new GridData(GridData.FILL_HORIZONTAL);
   data.horizontalSpan = 2;
   celsius.setLayoutData(data);
   // Set the context-sensitive help
   celsius.setData("Type a temperature in Celsius");
   // Add the listeners
   celsius.addHelpListener(this);
   celsius.addVerifyListener(this);
   celsius.addModifyListener(this);
   // Create the area for help
   help = new Label(shell, SWT.LEFT | SWT.BORDER);
   data = new GridData(GridData.FILL_HORIZONTAL);
   data.horizontalSpan = 3;
   help.setLayoutData(data);
 }
 /**
  * Called when user requests help
  */
 public void helpRequested(HelpEvent event) {
   // Get the help text from the widget and set it into the help label
   help.setText((String) event.widget.getData());
 }
 /**
  * Called when the user types into a text box, but before the text box gets
  * what the user typed
  */
 public void verifyText(VerifyEvent event) {
   // Assume we don"t allow it
   event.doit = false;
   // Get the character typed
   char myChar = event.character;
   String text = ((Text) event.widget).getText();
   // Allow "-" if first character
   if (myChar == "-" && text.length() == 0) event.doit = true;
   // Allow 0-9
   if (Character.isDigit(myChar)) event.doit = true;
   // Allow backspace
   if (myChar == "\b") event.doit = true;
 }
 /**
  * Called when the user modifies the text in a text box
  */
 public void modifyText(ModifyEvent event) {
   // Remove all the listeners, so we don"t enter any infinite loops
   celsius.removeVerifyListener(this);
   celsius.removeModifyListener(this);
   fahrenheit.removeVerifyListener(this);
   fahrenheit.removeModifyListener(this);
   // Get the widget whose text was modified
   Text text = (Text) event.widget;
   try {
     // Get the modified text
     int temp = Integer.parseInt(text.getText());
     // If they modified fahrenheit, convert to Celsius
     if (text == fahrenheit) {
       celsius.setText(String.valueOf((int) (FIVE_NINTHS * (temp - 32))));
     } else {
       // Convert to fahrenheit
       fahrenheit.setText(String.valueOf((int) (NINE_FIFTHS * temp + 32)));
     }
   } catch (NumberFormatException e) { /* Ignore */ }
   // Add the listeners back
   celsius.addVerifyListener(this);
   celsius.addModifyListener(this);
   fahrenheit.addVerifyListener(this);
   fahrenheit.addModifyListener(this);
 }
 /**
  * The application entry point
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   new MultipleListenersExample().run();
 }

}


      </source>
   
  
 
  



Key Listener Example

   <source lang="java">

import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.rubo; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class KeyListenerExample {

 Display d;
 Shell s;
 KeyListenerExample() {
   d = new Display();
   s = new Shell(d);
   s.setSize(250, 200);
   
   s.setText("A KeyListener Example");
   s.setLayout(new RowLayout());
   final Combo c = new Combo(s, SWT.DROP_DOWN | SWT.BORDER);
   c.add("Lions");
   c.add("Tigers");
   c.add("Bears");
   c.add("Oh My!");
   c.addKeyListener(new KeyListener() {
     String selectedItem = "";
     public void keyPressed(KeyEvent e) {
       if (c.getText().length() > 0) {
         return;
       }
       String key = Character.toString(e.character);
       String[] items = c.getItems();
       for (int i = 0; i < items.length; i++) {
         if (items[i].toLowerCase().startsWith(key.toLowerCase())) {
           c.select(i);
           selectedItem = items[i];
           return;
         }
       }
     }
     public void keyReleased(KeyEvent e) {
       if (selectedItem.length() > 0)
         c.setText(selectedItem);
       selectedItem = "";
     }
   });
   s.open();
   while (!s.isDisposed()) {
     if (!d.readAndDispatch())
       d.sleep();
   }
   d.dispose();
 }
 public static void main() {
   new KeyListenerExample();
 }

}


      </source>
   
  
 
  



ModifyEvent: Temperature Converter JFace

   <source lang="java">

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

* Copyright (c) 1998, 2004 Jackwind Li Guojie
* All right reserved. 
* 
* Created on Jan 16, 2004 8:05:36 PM by JACK
* $Id$
* 
* visit: http://www.asprise.ru/swt
*****************************************************************************/

import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class TemperatureConverterJFace extends ApplicationWindow {

 Label fahrenheitLabel;
 Label celsiusLabel;
 Text fahrenheitValue;
 Text celsiusValue;  
 
 public TemperatureConverterJFace() {
   super(null);
   
   addStatusLine();
 }
 /* (non-Javadoc)
  * @see org.eclipse.jface.window.Window#createContents(org.eclipse.swt.widgets.ruposite)
  */
 protected Control createContents(Composite parent) {
   getShell().setText("JFace Temperature Converter");
   
   Composite converterComposite = new Composite(parent, SWT.NULL);
   
   converterComposite.setLayout(new GridLayout(4, false));
   fahrenheitLabel = new Label(converterComposite, SWT.NULL);
   fahrenheitLabel.setText("Fahrenheit: ");
   fahrenheitValue = new Text(converterComposite, SWT.SINGLE | SWT.BORDER);
   celsiusLabel = new Label(converterComposite, SWT.NULL);
   celsiusLabel.setText("Celsius: ");
   celsiusValue = new Text(converterComposite, SWT.SINGLE | SWT.BORDER);
   ModifyListener listener = new ModifyListener() {
     public void modifyText(ModifyEvent e) {
       valueChanged((Text) e.widget);
     }
   };
   fahrenheitValue.addModifyListener(listener);
   celsiusValue.addModifyListener(listener);
 
   return converterComposite;
 }
 /**
  * Performs conversion when one of the text fields changes.
  * 
  * @param text
  *            the event source
  */
 public void valueChanged(Text text) {
   if (!text.isFocusControl())
     return;
   if (text == fahrenheitValue) {
     try {
       double fValue = Double.parseDouble(text.getText());
       double cValue = (fValue - 32) / 1.8;
       celsiusValue.setText(Double.toString(cValue));
       System.out.println("F -> C: " + cValue);
       setStatus("Conversion performed successfully.");
     } catch (NumberFormatException e) {
       celsiusValue.setText("");
       setStatus("Invalid number format: " + text.getText());
     }
   } else {
     try {
       double cValue = Double.parseDouble(text.getText());
       double fValue = cValue * 1.8 + 32;
       fahrenheitValue.setText(Double.toString(fValue));
       System.out.println("C -> F: " + fValue);
       setStatus("Conversion performed successfully.");
     } catch (NumberFormatException e) {
       fahrenheitValue.setText("");
       setStatus("Invalid number format: " + text.getText());
     }
   }
 }
 
 public static void main(String[] args) {
   TemperatureConverterJFace converter = new TemperatureConverterJFace();
   converter.setBlockOnOpen(true);
   converter.open();
   Display.getCurrent().dispose();
 }
 

}


      </source>
   
  
 
  



Mouse Event Listener

   <source lang="java">

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

* Copyright (c) 1998, 2004 Jackwind Li Guojie
* All right reserved. 
* 
* Created on Oct 27, 2003 10:38:29 PM by JACK
* $Id: ListenerTest.java,v 1.1 2003/12/22 12:07:54 jackwind Exp $
* 
* visit: http://www.asprise.ru/swt
*****************************************************************************/

import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; public class ListenerTest {

 public ListenerTest() {
   Display display = new Display();
   Shell shell = new Shell(display);
   shell.setText("Left click your mouse");
   shell.setSize(200, 100);
   shell.open();    
   
   shell.addListener(SWT.MouseDown, new SimpleListener("Shell mouse down listener"));
   
   display.addFilter(SWT.MouseDown, new SimpleListener("Display mouse down Listener"));
   display.addFilter(SWT.MouseUp, new SimpleListener("Display mouse up Listener"));
   
   while(! shell.isDisposed()) {
     if(! display.readAndDispatch()) {// If no more entries in event queue
       display.sleep();
     }
   }
   
   display.dispose();
 }
 
 class SimpleListener implements Listener{
   String name;
   
   public SimpleListener(String name) {
     this.name = name;
   }
   public void handleEvent(Event e) {
     System.out.println("Event: [" + EventUtil.getEventName(e.type) + "] from " + name + ". \tCurrent Time (in ms):  " + System.currentTimeMillis());
   }
 }
 public static void main(String[] args) {
   new ListenerTest();
 }

}


      </source>
   
  
 
  



SelectionListener and DisposeListener

   <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.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; /**

* This class demonstrates SelectionListener and DisposeListener
*/

public class DisposeListenerExample {

 /**
  * The application entry point
  * 
  * @param args the command line arguments
  */
 public static void main(String[] args) {
   Display display = new Display();
   // Create the main window
   Shell mainShell = new Shell(display);
   mainShell.setLayout(new FillLayout());
   mainShell.setText("Big Brother");
   final Label mainMessage = new Label(mainShell, SWT.LEFT);
   mainMessage.setText("Don"t even think about it");
   // Create the child shell and the dispose listener
   final Shell childShell = new Shell(mainShell);
   childShell.addDisposeListener(new DisposeListener() {
     public void widgetDisposed(DisposeEvent event) {
       // When the child shell is disposed, change the message on the main shell
       mainMessage.setText("Gotcha");
     }
   });
   childShell.setLayout(new FillLayout());
   childShell.setText("little brother");
   // Put a message on the child shell
   new Label(childShell, SWT.LEFT)
       .setText("If you dispose me, my big brother"s gonna get you!");
   // Add a button and a listener to the child shell
   Button button = new Button(childShell, SWT.PUSH);
   button.setText("Close Me!");
   button.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       // When the button is pressed, close the child shell
       childShell.close();
     }
   });
   // Open the shells
   mainShell.open();
   childShell.open();
   while (!mainShell.isDisposed()) {
     if (!display.readAndDispatch()) {
       display.sleep();
     }
   }
   display.dispose();
 }

}


      </source>
   
  
 
  



Utility class for event handling

   <source lang="java">

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

* Copyright (c) 1998, 2004 Jackwind Li Guojie
* All right reserved. 
* 
* Created on Oct 28, 2003 12:29:41 AM by JACK
* $Id: EventUtil.java,v 1.1 2003/12/22 12:07:54 jackwind Exp $
* 
* visit: http://www.asprise.ru/swt
*****************************************************************************/

import org.eclipse.swt.SWT; /**

* Utility class for event handling.
*/

public class EventUtil {

 public static String getEventName(int eventType) {
   switch(eventType) {
     case SWT.None:
       return "null";
     case SWT.KeyDown:
       return "key down";
     case SWT.KeyUp:
       return "key up";
     case SWT.MouseDown:
       return "mouse down";
     case SWT.MouseUp:
       return "mouse up";
     case SWT.MouseMove:
       return "mouse move";
     case SWT.MouseEnter:
       return "mouse enter";
     case SWT.MouseExit:
       return "mouse exit";
     case SWT.MouseDoubleClick:
       return "mouse double click";
     case SWT.Paint:
       return "paint";
     case SWT.Move:
       return "move";
     case SWT.Resize:
       return "resize";
     case SWT.Dispose:
       return "dispose";
     case SWT.Selection:
       return "selection";
     case SWT.DefaultSelection:
       return "default selection";
     case SWT.FocusIn:
       return "focus in";
     case SWT.FocusOut:
       return "focus out";
     case SWT.Expand:
       return "expand";
     case SWT.Collapse:
       return "collapse";
     case SWT.Iconify:
       return "iconify";
     case SWT.Deiconify:
       return "deiconify";
     case SWT.Close:
       return "close";
     case SWT.Show:
       return "show";
     case SWT.Hide:
       return "hide";
     case SWT.Modify:
       return "modify";
     case SWT.Verify:
       return "verify";
     case SWT.Activate:
       return "activate";
     case SWT.Deactivate:
       return "deactivate";
     case SWT.Help:
       return "help";
     case SWT.DragDetect:
       return "drag detect";
     case SWT.Arm:
       return "arm";
     case SWT.Traverse:
       return "traverse";
     case SWT.MouseHover:
       return "mouse hover";
     case SWT.HardKeyDown:
       return "hard key down";
     case SWT.HardKeyUp:
       return "hard key up";
     case SWT.MenuDetect:
       return "menu detect";
   }
   
   return "unkown ???";
 }
 public static void main(String[] args) {
 }

}


      </source>