Java/SWT JFace Eclipse/JFace Dialog
Версия от 18:01, 31 мая 2010; (обсуждение)
Содержание
JFace"s ErrorDialog class
import org.eclipse.core.runtime.*;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* This class demonstrates JFace"s ErrorDialog class
*/
public class ShowError extends ApplicationWindow {
/**
* ShowError constructor
*/
public ShowError() {
super(null);
}
/**
* Runs the application
*/
public void run() {
// Don"t return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Configures the shell
*
* @param shell the shell
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
// Set the title bar text and the size
shell.setText("Show Error");
shell.setSize(400, 400);
}
/**
* Creates the main window"s contents
*
* @param parent the main window
* @return Control
*/
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
// Create a big text box to accept error text
final Text text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
text.setLayoutData(new GridData(GridData.FILL_BOTH));
// Create the button to launch the error dialog
Button show = new Button(composite, SWT.PUSH);
show.setText("Show Error");
show.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// Create the required Status object
Status status = new Status(IStatus.ERROR, "My Plug-in ID", 0,
"Status Error Message", null);
// Display the dialog
ErrorDialog.openError(Display.getCurrent().getActiveShell(),
"JFace Error", text.getText(), status);
}
});
return composite;
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new ShowError().run();
}
}
JFace"s IconAndMessageDialog
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* This class demonstrates JFace"s IconAndMessageDialog class
*/
public class DumbUser extends ApplicationWindow {
/**
* DumbUser constructor
*/
public DumbUser() {
super(null);
}
/**
* Runs the application
*/
public void run() {
// Don"t return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Creates the main window"s contents
*
* @param parent the main window
* @return Control
*/
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, true));
// Create the button
Button show = new Button(composite, SWT.NONE);
show.setText("Show");
final Shell shell = parent.getShell();
// Display the dialog
show.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// Create and show the dialog
DumbMessageDialog dlg = new DumbMessageDialog(shell);
dlg.open();
}
});
parent.pack();
return composite;
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new DumbUser().run();
}
}
/**
* This class demonstrates the IconAndMessageDialog class
*/
class DumbMessageDialog extends IconAndMessageDialog {
public static final int I_DUNNO_ID = IDialogConstants.CLIENT_ID;
public static final String I_DUNNO_LABEL = "I Dunno";
// The image
private Image image;
// The label for the "hidden" message
private Label label;
/**
* DumbMessageDialog constructor
*
* @param parent the parent shell
*/
public DumbMessageDialog(Shell parent) {
super(parent);
// Create the image
try {
image = new Image(parent.getDisplay(), new FileInputStream("jexp.gif"));
} catch (FileNotFoundException e) {}
// Set the default message
message = "Are you sure you want to do something that dumb?";
}
/**
* Sets the message
*
* @param message the message
*/
public void setMessage(String message) {
this.message = message;
}
/**
* Closes the dialog
*
* @return boolean
*/
public boolean close() {
if (image != null) image.dispose();
return super.close();
}
/**
* Creates the dialog area
*
* @param parent the parent composite
* @return Control
*/
protected Control createDialogArea(Composite parent) {
createMessageArea(parent);
// Create a composite to hold the label
Composite composite = new Composite(parent, SWT.NONE);
GridData data = new GridData(GridData.FILL_BOTH);
data.horizontalSpan = 2;
composite.setLayoutData(data);
composite.setLayout(new FillLayout());
// Create the label for the "hidden" message
label = new Label(composite, SWT.LEFT);
return composite;
}
/**
* Creates the buttons
*
* @param parent the parent composite
*/
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL,
true);
createButton(parent, IDialogConstants.NO_ID, IDialogConstants.NO_LABEL, false);
createButton(parent, I_DUNNO_ID, I_DUNNO_LABEL, false);
}
/**
* Handles a button press
*
* @param buttonId the ID of the pressed button
*/
protected void buttonPressed(int buttonId) {
// If they press I Dunno, close the dialog
if (buttonId == I_DUNNO_ID) {
setReturnCode(buttonId);
close();
} else {
// Otherwise, have some fun
label.setText("Yeah, right. You know nothing.");
}
}
/**
* Gets the image to use
*/
protected Image getImage() {
return image;
}
}
JFace"s InputDialog
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.window.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* This class demonstrates JFace"s InputDialog class
*/
public class GetInput extends ApplicationWindow {
/**
* GetInput constructor
*/
public GetInput() {
super(null);
}
/**
* Runs the application
*/
public void run() {
// Don"t return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Configures the shell
*
* @param shell the shell
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
// Set the title bar text
shell.setText("Get Input");
}
/**
* Creates the main window"s contents
*
* @param parent the main window
* @return Control
*/
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
// Create a label to display what the user typed in
final Label label = new Label(composite, SWT.NONE);
label.setText("This will display the user input from InputDialog");
// Create the button to launch the error dialog
Button show = new Button(composite, SWT.PUSH);
show.setText("Get Input");
show.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
InputDialog dlg = new InputDialog(Display.getCurrent().getActiveShell(),
"", "Enter 5-8 characters", label.getText(), new LengthValidator());
if (dlg.open() == Window.OK) {
// User clicked OK; update the label with the input
label.setText(dlg.getValue());
}
}
});
parent.pack();
return composite;
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new GetInput().run();
}
}
/**
* This class validates a String. It makes sure that the String is between 5 and 8
* characters
*/
class LengthValidator implements IInputValidator {
/**
* Validates the String. Returns null for no error, or an error message
*
* @param newText the String to validate
* @return String
*/
public String isValid(String newText) {
int len = newText.length();
// Determine if input is too short or too long
if (len < 5) return "Too short";
if (len > 8) return "Too long";
// Input must be OK
return null;
}
}
JFace"s MessageDialog
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* This class demonstrates JFace"s MessageDialog class
*/
public class SendMessage extends ApplicationWindow {
/**
* SendMessage constructor
*/
public SendMessage() {
super(null);
}
/**
* Runs the application
*/
public void run() {
// Don"t return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Configures the shell
*
* @param shell the shell
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
// Set the title bar text and the size
shell.setText("Send Message");
shell.setSize(500, 400);
}
/**
* Creates the main window"s contents
*
* @param parent the main window
* @return Control
*/
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(5, true));
// Create a big text box for the message text
final Text text = new Text(composite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL);
GridData data = new GridData(GridData.FILL_BOTH);
data.horizontalSpan = 5;
text.setLayoutData(data);
// Create the Confirm button
Button confirm = new Button(composite, SWT.PUSH);
confirm.setText("Confirm");
confirm.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Create the Error button
Button error = new Button(composite, SWT.PUSH);
error.setText("Error");
error.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Create the Information button
Button information = new Button(composite, SWT.PUSH);
information.setText("Information");
information.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Create the Question button
Button question = new Button(composite, SWT.PUSH);
question.setText("Question");
question.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Create the Warning button
Button warning = new Button(composite, SWT.PUSH);
warning.setText("Warning");
warning.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// Create the label to display the return value
final Label label = new Label(composite, SWT.NONE);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 5;
label.setLayoutData(data);
// Save ourselves some typing
final Shell shell = parent.getShell();
// Display a Confirmation dialog
confirm.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
boolean b = MessageDialog.openConfirm(shell, "Confirm", text.getText());
label.setText("Returned " + Boolean.toString(b));
}
});
// Display an Error dialog
error.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
MessageDialog.openError(shell, "Error", text.getText());
label.setText("Returned void");
}
});
// Display an Information dialog
information.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
MessageDialog.openInformation(shell, "Information", text.getText());
label.setText("Returned void");
}
});
// Display a Question dialog
question.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
boolean b = MessageDialog.openQuestion(shell, "Question", text.getText());
label.setText("Returned " + Boolean.toString(b));
}
});
// Display a Warning dialog
warning.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
MessageDialog.openWarning(shell, "Warning", text.getText());
label.setText("Returned void");
}
});
return composite;
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new SendMessage().run();
}
}
JFace"s ProgressMonitorDialog
import java.lang.reflect.InvocationTargetException;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
/**
* This class demonstrates JFace"s ProgressMonitorDialog class
*/
public class ShowProgress extends ApplicationWindow {
/**
* ShowProgress constructor
*/
public ShowProgress() {
super(null);
}
/**
* Runs the application
*/
public void run() {
// Don"t return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Configures the shell
*
* @param shell the shell
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
// Set the title bar text
shell.setText("Show Progress");
}
/**
* Creates the main window"s contents
*
* @param parent the main window
* @return Control
*/
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, true));
// Create the indeterminate checkbox
final Button indeterminate = new Button(composite, SWT.CHECK);
indeterminate.setText("Indeterminate");
// Create the ShowProgress button
Button showProgress = new Button(composite, SWT.NONE);
showProgress.setText("Show Progress");
final Shell shell = parent.getShell();
// Display the ProgressMonitorDialog
showProgress.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
try {
new ProgressMonitorDialog(shell).run(true, true,
new LongRunningOperation(indeterminate.getSelection()));
} catch (InvocationTargetException e) {
MessageDialog.openError(shell, "Error", e.getMessage());
} catch (InterruptedException e) {
MessageDialog.openInformation(shell, "Cancelled", e.getMessage());
}
}
});
parent.pack();
return composite;
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new ShowProgress().run();
}
}
/**
* This class represents a long running operation
*/
class LongRunningOperation implements IRunnableWithProgress {
// The total sleep time
private static final int TOTAL_TIME = 10000;
// The increment sleep time
private static final int INCREMENT = 500;
private boolean indeterminate;
/**
* LongRunningOperation constructor
*
* @param indeterminate whether the animation is unknown
*/
public LongRunningOperation(boolean indeterminate) {
this.indeterminate = indeterminate;
}
/**
* Runs the long running operation
*
* @param monitor the progress monitor
*/
public void run(IProgressMonitor monitor) throws InvocationTargetException,
InterruptedException {
monitor.beginTask("Running long running operation",
indeterminate ? IProgressMonitor.UNKNOWN : TOTAL_TIME);
for (int total = 0; total < TOTAL_TIME && !monitor.isCanceled(); total += INCREMENT) {
Thread.sleep(INCREMENT);
monitor.worked(INCREMENT);
if (total == TOTAL_TIME / 2) monitor.subTask("Doing second half");
}
monitor.done();
if (monitor.isCanceled())
throw new InterruptedException("The long running operation was cancelled");
}
}
JFace"s TitleAreaDialog
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.dialogs.*;
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.*;
import java.io.*;
/**
* This class demonstrates JFace"s TitleAreaDialog class
*/
public class ShowMyTitleAreaDialog extends ApplicationWindow {
/**
* ShowCustomDialog constructor
*/
public ShowMyTitleAreaDialog() {
super(null);
}
/**
* Runs the application
*/
public void run() {
// Don"t return from open() until window closes
setBlockOnOpen(true);
// Open the main window
open();
// Dispose the display
Display.getCurrent().dispose();
}
/**
* Creates the main window"s contents
*
* @param parent the main window
* @return Control
*/
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout(1, true));
// Create the button
Button show = new Button(composite, SWT.NONE);
show.setText("Show");
final Shell shell = parent.getShell();
// Display the TitleAreaDialog
show.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// Create and show the dialog
MyTitleAreaDialog dlg = new MyTitleAreaDialog(shell);
dlg.open();
}
});
parent.pack();
return composite;
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new ShowMyTitleAreaDialog().run();
}
}
/**
* This class shows an about box, based on TitleAreaDialog
*/
class MyTitleAreaDialog extends TitleAreaDialog {
// The image to display
private Image image;
/**
* MyTitleAreaDialog constructor
*
* @param shell the parent shell
*/
public MyTitleAreaDialog(Shell shell) {
super(shell);
// Create the image
try {
image = new Image(null, new FileInputStream("jexp.gif"));
} catch (FileNotFoundException e) {
// Ignore
}
}
/**
* Closes the dialog box Override so we can dispose the image we created
*/
public boolean close() {
if (image != null) image.dispose();
return super.close();
}
/**
* Creates the dialog"s contents
*
* @param parent the parent composite
* @return Control
*/
protected Control createContents(Composite parent) {
Control contents = super.createContents(parent);
// Set the title
setTitle("About This Application");
// Set the message
setMessage("This is a JFace dialog", IMessageProvider.INFORMATION);
// Set the image
if (image != null) setTitleImage(image);
return contents;
}
/**
* Creates the gray area
*
* @param parent the parent composite
* @return Control
*/
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
// Create a table
Table table = new Table(composite, SWT.FULL_SELECTION | SWT.BORDER);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
// Create two columns and show
TableColumn one = new TableColumn(table, SWT.LEFT);
one.setText("Real Name");
TableColumn two = new TableColumn(table, SWT.LEFT);
two.setText("Preferred Name");
table.setHeaderVisible(true);
// Add some data
TableItem item = new TableItem(table, SWT.NONE);
item.setText(0, "Robert Harris");
item.setText(1, "Bobby");
item = new TableItem(table, SWT.NONE);
item.setText(0, "Robert Warner");
item.setText(1, "Rob");
item = new TableItem(table, SWT.NONE);
item.setText(0, "Gabor Liptak");
item.setText(1, "Gabor");
one.pack();
two.pack();
return composite;
}
/**
* Creates the buttons for the button bar
*
* @param parent the parent composite
*/
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
}
}