feat(create-temp-drawings): 实现创建临时图纸对话框功能- 新增 CreateTempDrawingDialog 类,实现创建临时图纸的对话框界面

- 添加图纸对象类型选择功能,从首选项中获取类型信息
- 实现根据选中类型动态生成创建界面的属性字段
- 添加 ID 和版本号输入框,以及根据选中对象自动填充 ID 功能
- 实现关闭和新建按钮的事件处理- 优化界面布局,使属性字段按行排列并设置合适的宽度
mian
熊朝柱 2 months ago
parent f3403a4ab9
commit 0d27a8def7

@ -1,42 +1,100 @@
package cn.net.connor.createTempDrawings.dialogs;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.*;
import com.teamcenter.rac.aif.AbstractAIFApplication;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.kernel.TCComponentFolder;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCPreferenceService;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.DateButton;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.rac.util.UIUtilities;
public class CreateTempDrawingDialog extends AbstractAIFDialog implements ActionListener{
public class CreateTempDrawingDialog extends JFrame implements ActionListener{
private AbstractAIFApplication application;
private TCSession tcSession ;
private InterfaceAIFComponent selectComponent;
private JLabel drawingObjTypeLabel;//图纸对象类型标签
private JComboBox<String> drawingObjTypeComboBox;//图纸对象类型下拉输入框
private JButton okButton;//确认按钮
private JButton button1;//按钮
private JButton button2;//按钮
private List<String> drawingObjTypeInfos = new ArrayList<String>();//首选项中配置的对象类型信息
private JFrame buildFram;
private String currentChoosePropPreferenceName;//当前选中类型的
public CreateTempDrawingDialog(AbstractAIFApplication application) {
super(true);
this.application = application;
this.tcSession = (TCSession) this.application.getSession();
}
@Override
public void run() {
/**
*
* @param application
* @param selectComponent
*/
public CreateTempDrawingDialog(AbstractAIFApplication application, InterfaceAIFComponent selectComponent) {
try {
this.application = application;
this.tcSession = (TCSession) this.application.getSession();
this.selectComponent = selectComponent;
System.out.println("开始加载创建临时图纸面板!");
List<String> list1 = getPreferenceInfos("SB6_Create_LS_Design");
if (list1.isEmpty() || list1.size() <= 0) {
MessageBox.post("获取首选项SB6_Create_LS_Design配置信息失败请检查配置是否正确" , "提示", MessageBox.INFORMATION);
return;
}else {
if (this.drawingObjTypeInfos != null && this.drawingObjTypeInfos.size() > 0) {
this.drawingObjTypeInfos.clear();
}
this.drawingObjTypeInfos.addAll(list1);
}
initUI();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
*
* @param preferenceName
* @return List<String>
*/
public List<String> getPreferenceInfos(String preferenceName) {
List<String> drawingObjPropInfosList = new ArrayList<>();
TCPreferenceService preferenceService = tcSession.getPreferenceService();
String[] values = preferenceService.getStringValues(preferenceName);
if (values.length > 0) {
for (int i = 0; i < values.length; i++) {
drawingObjPropInfosList.add(values[i]);
}
}else {
System.out.println("获取首选项["+preferenceName+"]配置信息失败,请检查配置是否正确!");
}
System.out.println("共获取到首选项["+preferenceName+"]中的["+values.length+"]条配置信息");
return drawingObjPropInfosList;
}
/**
@ -44,48 +102,141 @@ public class CreateTempDrawingDialog extends AbstractAIFDialog implements Action
*/
private void initUI() throws Exception {
this.setTitle("请选择图纸类型");
this.setSize(800,600);
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.setSize(800, 600);
this.setLayout(new BorderLayout());
JPanel centerPanel = new JPanel(new PropertyLayout());
JPanel centerPanel = new JPanel(new GridBagLayout());
JPanel buttomPanel = new JPanel(new FlowLayout());
this.drawingObjTypeLabel = new JLabel("图纸对象类型 ");
String[] drawingTypes = {"类型1", "类型2", "类型3"};
JComboBox<String> drawingObjTypeComboBox = new JComboBox<String>(drawingTypes);
//获取图纸对象类型
List<String> typList = getDrawingObjTypeShowName();
if (typList.isEmpty() || typList.size() <= 0) {
System.out.println("获取图纸对象类型失败,请检查相关首选项是否配置正确!");
return;
}
String[] drawingTypes = typList.toArray(new String[0]);
this.drawingObjTypeComboBox = new JComboBox<String>(drawingTypes);
drawingObjTypeComboBox.setPreferredSize(new Dimension(200, drawingObjTypeComboBox.getPreferredSize().height));
drawingObjTypeComboBox.setEditable(false);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
gbc.insets = new Insets(0, 0, 0, 12); // 右边留出 10 像素的间距
centerPanel.add(this.drawingObjTypeLabel, gbc);
centerPanel.add("1.3.left.top",drawingObjTypeLabel);
centerPanel.add("1.4.left.top",drawingObjTypeComboBox);
gbc.gridx = 1;
centerPanel.add(drawingObjTypeComboBox, gbc);
this.okButton = new JButton("确认");
buttomPanel.add(okButton);
//按钮时间监听
okButton.addActionListener(this);
//构造主面板
this.setLayout(new BorderLayout());
this.add(centerPanel, BorderLayout.CENTER);
this.add(buttomPanel, BorderLayout.SOUTH);
//按钮时间监听
this.okButton.addActionListener(this);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setResizable(true);
this.setPreferredSize(new Dimension(800,600));
this.pack(); // 自动调整窗口大小以适应内部组件
//放到屏幕中央
UIUtilities.centerToScreen(this);
this.setVisible(true);
}
/**
*
* @return List<String>
*/
private List<String> getDrawingObjTypeShowName() {
List<String> drawingObjTypeList = new ArrayList<>();
if (this.drawingObjTypeInfos != null && this.drawingObjTypeInfos.size() > 0){
for (int i = 0; i < this.drawingObjTypeInfos.size(); i++) {
String drawingObjTypeInfo = this.drawingObjTypeInfos.get(i);
String[] drawingObjTypeInfoArray = drawingObjTypeInfo.split("=");
if (drawingObjTypeInfoArray.length == 3) {//配置的信息中只有两个=符号
drawingObjTypeList.add(drawingObjTypeInfoArray[0]);
}else{
System.out.println("配置信息:["+drawingObjTypeInfo+"]格式不正确,请检查相关首选项是否配置正确!");
}
}
}
return drawingObjTypeList;
}
/**
*
* @return
*/
private String getSelectTypePreferenceName() {
String returnValue = null;
//当前选中的图纸类型
String chooseType1 = (String) this.drawingObjTypeComboBox.getSelectedItem();
List<String> drawingObjTypeList = new ArrayList<>();
if (this.drawingObjTypeInfos != null && this.drawingObjTypeInfos.size() > 0){
for (int i = 0; i < this.drawingObjTypeInfos.size(); i++) {
String drawingObjTypeInfo = this.drawingObjTypeInfos.get(i);
String[] drawingObjTypeInfoArray = drawingObjTypeInfo.split("=");
if (drawingObjTypeInfoArray.length == 3) {//配置的信息中只有两个=符号
//遍历到的类型名称
String typeName = drawingObjTypeInfoArray[0];
if (chooseType1 != null && typeName != null){
if (chooseType1.equals(typeName)) {
returnValue = drawingObjTypeInfoArray[2];
break;
}
}
}else{
System.out.println("配置信息:["+drawingObjTypeInfo+"]格式不正确,请检查相关首选项是否配置正确!");
}
}
}
return returnValue;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
Object s = e.getSource();
try {
if (e.equals(this.okButton)) {
System.out.println("成功触发“确认”按钮!");
if (s.equals(this.okButton)) {
String chooseType = (String) this.drawingObjTypeComboBox.getSelectedItem();
System.out.println("当前选中图纸对象类型="+chooseType);
// 关闭当前窗口
this.dispose();
buildDrawingObjTypeFrame();
}else if (s.equals(this.closeButton)) {
System.out.println("触发‘关闭’按钮");
// 关闭新建窗口
this.buildFram.dispose();
}else if (s.equals(this.buildButton)) {
System.out.println("触发‘新建’按钮");
// 关闭新建窗口
this.buildFram.dispose();
}
} catch (Exception e2) {
// TODO: handle exception
}
@ -95,4 +246,247 @@ public class CreateTempDrawingDialog extends AbstractAIFDialog implements Action
private JLabel idLabel;
private JTextField idTextField;
private JLabel revLabel;
private JComboBox<String> revComboBox;
private List<String> showPropsInfoList = new ArrayList<>();
private JButton closeButton;
private JButton buildButton;
/**
*
* @return
* @throws TCException
*/
public JFrame buildDrawingObjTypeFrame() throws TCException{
System.out.println("创建新图纸界面!");
// 创建新界面
JFrame frame = new JFrame();
frame.setTitle("临时图纸创建界面");
this.setSize(400, 300);
this.setLayout(new BorderLayout());
JPanel centerPanel1 = new JPanel(new GridBagLayout());
JPanel buttomPanel1 = new JPanel(new FlowLayout());
//1.属性条目区域
this.idLabel = new JLabel("ID*");
String idValue = getIdValue(this.selectComponent);
if (idValue != null){
this.idTextField = new JTextField(idValue);
}
this.revLabel = new JLabel("版本");
String[] revs = {"S01"};//版本下拉框数组
this.revComboBox = new JComboBox<String>(revs);
// this.revComboBox.setEditable(true);
//布局
// ID Label
GridBagConstraints gbcIdLabel = new GridBagConstraints();
gbcIdLabel.gridx = 0;
gbcIdLabel.gridy = 0;
gbcIdLabel.anchor = GridBagConstraints.WEST;
gbcIdLabel.insets = new Insets(5, 5, 5, 5);
centerPanel1.add(this.idLabel, gbcIdLabel);
// ID TextField
GridBagConstraints gbcIdField = new GridBagConstraints();
gbcIdField.gridx = 1;
gbcIdField.gridy = 0;
gbcIdField.anchor = GridBagConstraints.WEST;
// 设置自定义宽度
Dimension textFieldSize = new Dimension(200, idTextField.getPreferredSize().height); // 将200设为所需的宽度
idTextField.setPreferredSize(textFieldSize);
centerPanel1.add(this.idTextField, gbcIdField);
// 版本 Label
GridBagConstraints gbcRevLabel = new GridBagConstraints();
gbcRevLabel.gridx = 0;
gbcRevLabel.gridy = 1;
gbcRevLabel.anchor = GridBagConstraints.WEST;
gbcRevLabel.insets = new Insets(5, 5, 5, 5);
centerPanel1.add(this.revLabel, gbcRevLabel);
// 版本 ComboBox
GridBagConstraints gbcRevCombo = new GridBagConstraints();
gbcRevCombo.gridx = 1;
gbcRevCombo.gridy = 1;
gbcRevCombo.anchor = GridBagConstraints.WEST;
// 设置自定义宽度
Dimension comboBoxSize = new Dimension(200, revComboBox.getPreferredSize().height); // 将200设为所需的宽度
revComboBox.setPreferredSize(comboBoxSize);
centerPanel1.add(this.revComboBox, gbcRevCombo);
String preferenceName = getSelectTypePreferenceName();
int propIndex = 2;
if (preferenceName != null){
List<String> propList = getPreferenceInfos(preferenceName);
for(String propInfo : propList){//propInfo格式为*有效期=Form.sb6_validuntil=date=Form.sb6_validuntil
String[] propConfigInfoArray= propInfo.split("=");
if (propConfigInfoArray.length >= 3){
String name = propConfigInfoArray[0];
String type = propConfigInfoArray[2];
// prop Label
if (name != null && name.contains("*")){
String chinese = extractChinese(name);
name = chinese + "*";
}
JLabel propLabel = new JLabel(name);
GridBagConstraints gbcPropLabel = new GridBagConstraints();
gbcPropLabel.gridx = 0;
gbcPropLabel.gridy = propIndex;
gbcPropLabel.anchor = GridBagConstraints.WEST;
gbcPropLabel.insets = new Insets(5, 5, 5, 5);
centerPanel1.add(propLabel, gbcPropLabel);
// prop value组件
if (type != null){
String typeValue = type.split(":")[0];
if (typeValue.equals("string")){
JTextField propTextField = new JTextField();
GridBagConstraints gbcPropCombo = new GridBagConstraints();
gbcPropCombo.gridx = 1;
gbcPropCombo.gridy = propIndex;
gbcPropCombo.anchor = GridBagConstraints.WEST;
// 设置自定义宽度
Dimension propValueSize = new Dimension(200, propTextField.getPreferredSize().height); // 将200设为所需的宽度
propTextField.setPreferredSize(propValueSize);
centerPanel1.add(propTextField, gbcPropCombo);
}else if (typeValue.equals("date")){
DateButton dateButton = new DateButton(null, "yyyy-MM-dd", false, false, false);
GridBagConstraints gbcPropCombo = new GridBagConstraints();
gbcPropCombo.gridx = 1;
gbcPropCombo.gridy = propIndex;
gbcPropCombo.anchor = GridBagConstraints.WEST;
// 设置自定义宽度
Dimension propValueSize = new Dimension(200, dateButton.getPreferredSize().height); // 将200设为所需的宽度
dateButton.setPreferredSize(propValueSize);
centerPanel1.add(dateButton, gbcPropCombo);
} else if (typeValue.equals("lov")) {
//TODO 根据冒号后面的LOV名称获取多个lov值封装成数组添加到propComboBox中
//TODO 文档中的继承属性来源又是个啥???
String[] lovs = {"lov1","lov2","lov3"};//模拟多个lov值
JComboBox<String> propComboBox = new JComboBox<String>(lovs);
//TODO 根据冒号后面的LOV名称获取多个lov值封装成数组添加到propComboBox中
//TODO 文档中的继承属性来源又是个啥???
String[] lovs = {"lov1","lov2","lov3"};//模拟多个lov值
GridBagConstraints gbcPropCombo = new GridBagConstraints();
gbcPropCombo.gridx = 1;
gbcPropCombo.gridy = propIndex;
gbcPropCombo.anchor = GridBagConstraints.WEST;
// 设置自定义宽度
Dimension propValueSize = new Dimension(200, propComboBox.getPreferredSize().height); // 将200设为所需的宽度
propComboBox.setPreferredSize(propValueSize);
centerPanel1.add(propComboBox, gbcPropCombo);
}
}
propIndex ++;
}
}
}else {
System.out.println("未找到选中类型对应的首选项请检查首选项SB6_Create_LS_Design配置是否正确");
}
//2.按钮区域
this.closeButton = new JButton("关闭");
buttomPanel1.add(closeButton);
this.buildButton = new JButton("新建");
buttomPanel1.add(buildButton);
//按钮事件监听
this.closeButton.addActionListener(this);
this.buildButton.addActionListener(this);
frame.add(centerPanel1, BorderLayout.CENTER);
frame.add(buttomPanel1, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setResizable(true);
frame.setPreferredSize(new Dimension(800,600));
frame.pack(); // 自动调整窗口大小以适应内部组件
//放到屏幕中央
UIUtilities.centerToScreen(this);
frame.setVisible(true);
this.buildFram = frame;
return frame;
}
/**
* ()ID
* @param selectComponent2
* @return ID
* @throws TCException
*/
private String getIdValue(InterfaceAIFComponent selectComponent2) throws TCException {
// String idValue = "";
if(selectComponent2 instanceof TCComponentItemRevision){
System.out.println("当前选中对象是版本对象开始获取创建界面的ID属性值");
TCComponentItemRevision itemRevision = (TCComponentItemRevision) selectComponent2;
String idValue = itemRevision.getStringProperty("item_id");
if (idValue != null && !idValue.equals("")){
return idValue.replace("_","");
}else {{
return null;//获取版本对象的ID失败
}}
}else if (selectComponent instanceof TCComponentFolder) {
System.out.println("当前选中对象是文件夹对象创建界面的ID属性值置空");
return "";
}else {
return null;
}
}
/**
*
*/
public String extractChinese(String str) {
if (str == null || str.isEmpty()) {
return "";
}
// 使用正则表达式匹配中文字符
Pattern pattern = Pattern.compile("[\\u4e00-\\u9fa5]+");
Matcher matcher = pattern.matcher(str);
StringBuilder sb = new StringBuilder();
while (matcher.find()) {
sb.append(matcher.group());
}
return sb.toString();
}
}

@ -22,6 +22,10 @@ public class CreateTempDrawingHandler extends AbstractHandler {
AbstractAIFApplication application = AIFUtility.getCurrentApplication();
//1.判断选中对象是否符合要求
InterfaceAIFComponent selectComponent = application.getTargetContext().getComponent();
if (selectComponent == null) {
MessageBox.post("请选中对象再操作!" , "提示", MessageBox.INFORMATION);
return null;
}
System.out.println("当前选中对象类型为:"+selectComponent.getType());
try {
@ -37,9 +41,9 @@ public class CreateTempDrawingHandler extends AbstractHandler {
}
if (flag != 0) {
CreateTempDrawingDialog dialog = new CreateTempDrawingDialog(application);
CreateTempDrawingDialog dialog = new CreateTempDrawingDialog(application, selectComponent);
new Thread(dialog).start();
// new Thread(dialog).start();
}else {
MessageBox.post("请选择文件夹或试制联系单版本或临时问题处理通知单版本后执行创建临时图纸功能!" , "提示", MessageBox.INFORMATION);

Loading…
Cancel
Save