SWT(JFace)体验之ApplicationWindow

时间:2023-01-02 09:59:43 

测试代码如下:


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();
}
}
标签:SWT,JFace,ApplicationWindow
0
投稿

猜你喜欢

  • Java链表(Linked List)基本原理与实现方法入门示例

    2021-10-12 05:49:14
  • Java 反射机制详解及实例代码

    2023-07-13 15:22:29
  • SpringBoot集成SpringSecurity和JWT做登陆鉴权的实现

    2023-01-29 09:34:57
  • C#窗体传值代码方法

    2022-12-03 22:57:37
  • Android实现在一个activity中添加多个listview的方法

    2023-10-13 14:41:22
  • Android实现视频播放--腾讯浏览服务(TBS)功能

    2021-09-06 20:13:10
  • 详解LeakCanary分析内存泄露如何实现

    2022-12-03 22:04:40
  • Java遍历Properties所有元素的方法实例

    2022-09-08 14:58:24
  • C#中进程的挂起与恢复

    2022-05-17 13:33:26
  • Apache Commons Math3探索之多项式曲线拟合实现代码

    2023-11-16 22:01:56
  • tk.Mybatis 插入数据获取Id问题

    2023-07-01 22:03:13
  • SpringBoot整合Mybatis的知识点汇总

    2023-11-15 21:56:06
  • SpringBoot整合Groovy脚本实现动态编程详解

    2023-04-02 03:24:16
  • Android自定义View实现波浪动画

    2022-05-27 23:04:46
  • 44条Java代码优化建议

    2023-12-22 06:03:49
  • 获取Android手机中所有短信的实现代码

    2023-08-04 16:55:30
  • C# 注册表 操作实现代码

    2023-07-02 21:53:22
  • java 避免出现NullPointerException(空指针)的方法总结

    2022-08-31 04:15:51
  • MyBatis整合Redis实现二级缓存的示例代码

    2022-02-06 15:41:24
  • Kafka 日志存储实现过程

    2021-11-01 05:04:00
  • asp之家 软件编程 m.aspxhome.com