利用NetBeans创建GUI界面,并集成前面录制的操作流程代码。
Create Main Class
前的复选框,点击Finish按钮创建工程注:之所以创建不同的包,主要是为了方便文件管理,也可以不创建包。
”
package Name
为GUI
,点击按钮Finish
完成包的创建相同方式创建另一个包Macros
右键选择节点GUI,选择菜单New > JFrame Form...
注:变量名称很重要,后面要用到。
”
Libraries
,点击弹出菜单项Add Library...
1、添加成员变量及构造函数
import star.common.Simulation;
private Simulation sim = null;
public MacroWindows(Simulation Simlocal){
initComponents();
this.sim = Simlocal;
}
这里创建了一个新的构造函数,其接受一个Simulation对象作为参数。添加完毕后如下图所示。
2、封装函数
下面回到MacroWindows类中添加功能。录制的宏文件很长而且没有参数化,这里需要将其封装成一个函数,包含两个参数:管道的长度及管道的半径。
privite void createPipe(double radius, double length){
...
//创建半径为radius的圆
RadiusDimension radiusDimension_0 =
sketch_0.createRadiusDimension(circleSketchPrimitive_0, radius, units_0);
...
//设置拉伸长度为length
extrusionMerge_0.getDistance().setValue(length,units_0);
...
}
将代码中的所有simulation_0
替换为this.sim
注释掉或直接删除Simulation this.sim = getActiveSimulation();
代码粘贴后可能会存在一些引用问题,如下图所示,利用netbeans消除这些引用错误
也可以在文件头部添加下面的语句:
import star.base.neo.*;
import star.cadmodeler.*;
import star.common.*;
private void JButton_CreateGeometryActionPerformed(java.awt.event.ActionEvent evt) {
double radius;
double length;
try {
radius = Double.valueOf(JTextField_PipeRadius.getText());
} catch (NumberFormatException e) {
radius = 0.01;
}
try {
length = Double.valueOf(JTextField_PipeLength.getText());
} catch (NumberFormatException e) {
length = 0.1;
}
createPipe(radius, length);
//自动关闭窗口
this.dispose();
}
下面创建一个启动类(启动类可以直接使用录制的java代码,也可以新建一个类)。
package Macro;
import GUI.MacroWindows;
import javax.swing.JFrame;
import star.common.Simulation;
import star.common.StarMacro;
public class RunMacro extends StarMacro{
@Override
public void execute() {
Simulation sim = this.getActiveSimulation();
MacroWindows mw = new MacroWindows(sim);
mw.setVisible(true);
mw.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
这种开发方式比较简单,但最大的缺点是所有的源文件都是公开的。
看不明白的道友可以看视频:
本案例用到了两个文件:MacroWindows.java及runMarco.java,其中MacroWindows.java负责GUI界面及功能实现,而runMarco.java仅负责调用GUI。
其实如果界面元素较为简单的话,也可以将GUI代码及功能实现代码全部卸载runMarco.java中。
同理,如果流程较为复杂,也可以创建新的类,由GUI代码负责调用。
需要注意的是,STAR CCM+调用的java文件中,必须有继承自StarMarco的类,且必须实现execute()
方法。
(完)