//Send questions, comments, bug reports, etc. to the authors:
//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)
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, "java2s.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();
}
}
|