首页/文章/ 详情

在STAR-CCM+中运行GUI代码

1年前浏览5017

书接上文CFD二次开发必不可少的GUI练习,本文主要演示如何在STAR-CCM+中运行上篇文章中的两个GUI代码。

一般流程

案例一

一般流程如下:

  1. 使编写的SendMsg类继承StarMacro类,这样就可以利用STAR-CCM+的宏播放功能来加载该代码;
  2. StarMacro类默认需要执行execute方法,所以只需要把main方法改为execute方法就可以正常运行;
  3. 启动STAR-CCM+,并新建一个sim文件,点击播放宏按钮,找到修改后的代码,确定即可加载运行。

修改后的代码如下:

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代码的教程,如果对你有帮助,请点个大大的赞!

你的鼓励就是我最大的动力!


来源:CFD日志
二次开发
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-03-28
最近编辑:1年前
CFD日志
硕士 | CFD工程师 CFD仿真、风机设计、二次开发
获赞 241粉丝 2170文章 39课程 8
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈