书接上文CFD二次开发必不可少的GUI练习,本文主要演示如何在STAR-CCM+中运行上篇文章中的两个GUI代码。
一般流程如下:
SendMsg
类继承StarMacro
类,这样就可以利用STAR-CCM+的宏播放功能来加载该代码;StarMacro
类默认需要执行execute方法,所以只需要把main方法改为execute方法就可以正常运行;修改后的代码如下:
package my;
import star.common.StarMacro;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
public class SendMsg extends StarMacro {
JFrame jf = new JFrame("测试");
JTextArea jta = new JTextArea(5,30);
JButton jb = new JButton("发送");
JTextField jtf = new JTextField(15);
public void init(){
//给jf窗口添加一个文本区域jta
jf.add(jta);
//创建一个JPanel容器
JPanel jp = new JPanel();
//容器jp中添加文本框jtf
jp.add(jtf);
//容器jp中添加按键
jp.add(jb);
//将jp容器添加到jf窗口中,并应用SOUTH布局
jf.add(jp, BorderLayout.SOUTH);
//创建事件***,发送消息的Action,Action是ActionListener的子接口
Action sendMsg = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
jta.append(jtf.getText() + "\n");
jtf.setText("");
}
};
//注册事件***
jb.addActionListener(sendMsg);
//将Ctrl+Enter键和“send”关联
jtf.getInputMap().put(KeyStroke.getKeyStroke('\n', InputEvent.CTRL_MASK),"send");
//将“send”和sendMsg Action关联
jtf.getActionMap().put("send",sendMsg);
jf.pack();
jf.setVisible(true);
}
//创建主方法
//public static void main(String[] args){
//new SendMsg().init();
// }
@Override
public void execute() {
new SendMsg().init();
}
}
下面的图片展示了加载至STAR-CCM+中的GUI显示效果。
流程上与上面的案例基本相同,唯一的区别是这个案例引用了Book
类和两张图片,所以需要在STAR-CCM+中设置Java宏的运行路径,这里需要把你的Java项目的src文件夹路径添加到STAR-CCM+的环境变量中,具体设置如下:
所以直接展示修改后的代码:
package my;
import star.common.StarMacro;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
public class SplitPane extends StarMacro {
Book[] books = new Book[]{
new Book("CFD日志", new ImageIcon("这里是图片的绝对路径")
, "分享干货,记录成长")
, new Book("一键三连", new ImageIcon("这里是图片的绝对路径")
, "感谢你的支持!")
};
JFrame jf = new JFrame("测试");
JList<Book> bookList = new JList<>(books);
JLabel bookCover = new JLabel();
JTextArea bookDesc = new JTextArea();
public void init() {
//为三个组件设置最佳大小
bookList.setPreferredSize(new Dimension(150, 300));
bookCover.setPreferredSize(new Dimension(300, 150));
bookDesc.setPreferredSize(new Dimension(300, 150));
//为下拉列表添加事件***
bookList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
Book book = (Book) bookList.getSelectedValue();
bookCover.setIcon(book.getIco());
bookDesc.setText(book.getDesc());
}
});
//创建一个垂直的分割面板
//将bookCover放在上面,将bookDesc放在下面,支持连续布局
JSplitPane left = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, bookCover, new JScrollPane(bookDesc));
//打开“一触即展”特性
left.setOneTouchExpandable(true);
//下面代码设置分割条大小
//left.setDividerSize(50);
//设置该分割面板根据所包含组件的最佳大小来调整布局
left.resetToPreferredSizes();
//创建一个水平的分割面板
//将left组件放在左边,将bookList组件放在右边
JSplitPane content = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left, bookList);
jf.add(content);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jf.pack();
jf.setVisible(true);
}
/*public static void main(String[] args){
new SplitPane().init();
}*/
@Override
public void execute() {
new SplitPane().init();
}
}
在STAR-CCM+中加载上述代码后的效果如下图所示:
以上就是如何在STAR-CCM+中加载GUI代码的教程,如果对你有帮助,请点个大大的赞!
你的鼓励就是我最大的动力!