测试代码如下: 
package swt_jface.demo; 
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.Composite; 
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(); 
} 
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; 
} 
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(); 
} 
}
不使用ApplicationWindow(即只是用SWT类)的解决方案:
package swt_jface.demo; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.events.ModifyEvent; 
import org.eclipse.swt.events.ModifyListener; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Text; 
public class TemperatureConverter { 
Display display = new Display(); 
Shell shell = new Shell(display); 
Label fahrenheitLabel; 
Label celsiusLabel; 
Label messageLabel; 
Text fahrenheitValue; 
Text celsiusValue; 
public TemperatureConverter() { 
shell.setText("SWT Temperature Converter"); 
shell.setLayout(new GridLayout(4, false)); 
fahrenheitLabel = new Label(shell, SWT.NULL); 
fahrenheitLabel.setText("Fahrenheit: "); 
fahrenheitValue = new Text(shell, SWT.SINGLE | SWT.BORDER); 
celsiusLabel = new Label(shell, SWT.NULL); 
celsiusLabel.setText("Celsius: "); 
celsiusValue = new Text(shell, SWT.SINGLE | SWT.BORDER); 
messageLabel = new Label(shell, SWT.BORDER); 
GridData gridData = new GridData(GridData.FILL_BOTH); 
gridData.horizontalSpan = 4; 
messageLabel.setLayoutData(gridData); 
ModifyListener listener = new ModifyListener() { 
public void modifyText(ModifyEvent e) { 
valueChanged((Text) e.widget); 
} 
}; 
fahrenheitValue.addModifyListener(listener); 
celsiusValue.addModifyListener(listener); 
shell.pack(); 
shell.open(); 
while (!shell.isDisposed()) { 
if (!display.readAndDispatch()) { 
display.sleep(); 
} 
} 
display.dispose(); 
} 
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); 
messageLabel.setText("Conversion performed successfully."); 
} catch (NumberFormatException e) { 
celsiusValue.setText(""); 
messageLabel.setText("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); 
messageLabel.setText("Conversion performed successfully."); 
} catch (NumberFormatException e) { 
fahrenheitValue.setText(""); 
messageLabel.setText("Invalid number format: " + text.getText()); 
} 
} 
} 
public static void main(String[] args) { 
new TemperatureConverter(); 
} 
}