📄 inputzdj.java
字号:
package cn.work.zdj.ui;
import java.util.Hashtable;
import java.util.Vector;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import cn.work.zdj.sys.AutoMachine;
import cn.work.zdj.sys.AutoMachineFactory;
import cn.work.zdj.sys.IAppConstants;
import cn.work.zdj.sys.AutoMachine.ThreeRow;
public class InputZdj extends ViewPart implements ISelectionListener{
private Group group_1,group_2,group_3,group_4,group_5;
private Button bState_1,bLetter_1,bFunction_1,bFirState_1,bEndState_1;
private Text lState_1,lLetter_1,lFunction_1,lFirState_1,lEndState_1;
private AutoMachine machine;
private int funLine = 6;
private Vector threeRow;
public InputZdj() {
// TODO 自动生成构造函数存根
}
@Override
public void createPartControl(Composite parent) {
// TODO 自动生成方法存根
Composite composite = new Composite(parent,SWT.NONE);
composite.setLayout(new GridLayout(1,false));
//Color fontColor = new Color(Display.getCurrent(),0xff,0x00,0x00);
Composite comLabel = new Composite(composite,SWT.None);
comLabel.setLayout(new GridLayout(2,true));
Label label = new Label(comLabel,SWT.NONE);
label.setText("请输入该自动机的名称");
final Text txtLabel = new Text(comLabel,SWT.BORDER);
txtLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false));
//第一组
group_1 = new Group(composite,SWT.None);
GridData gd = new GridData(GridData.FILL_BOTH);
group_1.setLayoutData(gd);
group_1.setText("输入状态集");
final GridLayout gridLayout = new GridLayout(3,false);
gridLayout.marginRight = 10;
gridLayout.verticalSpacing = 10;
gridLayout.marginHeight = 10;
group_1.setLayout(gridLayout);
final Label label1 = new Label(group_1,SWT.None);
label1.setText("状态集");
final Text tState_1 = new Text(group_1,SWT.RIGHT|SWT.BORDER);
tState_1.setText("");
bState_1 = new Button(group_1,SWT.NONE);
bState_1.setText("增加");
gd = new GridData();
lState_1 = new Text(group_1,SWT.None);
lState_1.setText("未输入状态集");
lState_1.setText("q0,q1,q2,q3,q4,");
lState_1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,3,1));
//lState_1.setEnabled(false);
// 第二组
group_2 = new Group(composite,SWT.None);
gd = new GridData(GridData.FILL_BOTH);
group_2.setLayoutData(gd);
group_2.setText("输入字母表");
group_2.setLayout(new GridLayout(3,false));
final Label label2 = new Label(group_2,SWT.None);
label2.setText("字母表");
final Text tLetter_1 = new Text(group_2,SWT.RIGHT|SWT.BORDER);
tLetter_1.setText("");
bLetter_1 = new Button(group_2,SWT.NONE);
bLetter_1.setText("增加");
lLetter_1 = new Text(group_2,SWT.None);
lLetter_1.setText("未输入字母表");
lLetter_1.setText("a,b,");
lLetter_1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,3,1));
//lLetter_1.setEnabled(false);
// 第三组
group_3 = new Group(composite,SWT.None);
gd = new GridData(GridData.FILL_BOTH);
group_3.setLayoutData(gd);
group_3.setText("输入转换函数");
group_3.setLayout(new GridLayout(9,false));
final Label label3 = new Label(group_3,SWT.None);
label3.setText("转换函数");
final Label label4 = new Label(group_3,SWT.None);
label4.setText("(");
final Text tFunction_1 = new Text(group_3,SWT.RIGHT|SWT.BORDER);
final Label label5 = new Label(group_3,SWT.None);
label5.setText(",");
final Text tFunction_2 = new Text(group_3,SWT.RIGHT|SWT.BORDER);
final Label label6 = new Label(group_3,SWT.None);
label6.setText(")");
final Label label7 = new Label(group_3,SWT.None);
label7.setText("=");
final Text tFunction_3 = new Text(group_3,SWT.RIGHT|SWT.BORDER);
tFunction_3.setText("");
bFunction_1 = new Button(group_3,SWT.NONE);
bFunction_1.setText("增加");
lFunction_1 = new Text(group_3,SWT.COLOR_RED);
lFunction_1.setText("未输入转换函数");
lFunction_1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,9,9));
// 第四组
group_4 = new Group(composite,SWT.None);
gd = new GridData(GridData.FILL_BOTH);
group_4.setLayoutData(gd);
group_4.setText("输入初始状态");
group_4.setLayout(new GridLayout(3,false));
final Label label8 = new Label(group_4,SWT.None);
label8.setText("初始状态");
final Text tFirState_1 = new Text(group_4,SWT.RIGHT|SWT.BORDER);
bFirState_1 = new Button(group_4,SWT.NONE);
bFirState_1.setText("增加");
lFirState_1 = new Text(group_4,SWT.None);
lFirState_1.setText("未输入初始状态");
//lFirState_1.setText("q0");
lFirState_1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,3,1));
//lFirState_1.setEnabled(false);
// 第五组
group_5 = new Group(composite,SWT.None);
gd = new GridData(GridData.FILL_BOTH);
group_5.setLayoutData(gd);
group_5.setText("输入终止状态");
group_5.setLayout(new GridLayout(3,false));
final Label label9 = new Label(group_5,SWT.None);
label9.setText("终止状态");
final Text tEndState_1 = new Text(group_5,SWT.RIGHT|SWT.BORDER);
tEndState_1.setText("");
bEndState_1 = new Button(group_5,SWT.NONE);
bEndState_1.setText("增加");
lEndState_1 = new Text(group_5,SWT.None);
lEndState_1.setText("未输入终止状态");
//lEndState_1.setText("q3,");
lEndState_1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,3,1));
//lEndState_1.setEnabled(false);
gd = new GridData();
gd.horizontalAlignment = SWT.CENTER;
Composite comBtn = new Composite(composite,SWT.None);
comBtn.setLayout(new GridLayout(3,true));
comBtn.setLayoutData(gd);
final Button sure = new Button(comBtn,SWT.RIGHT);
sure.setText("增加自动机");
final Button modify = new Button(comBtn,SWT.RIGHT);
modify.setText("删除");
modify.setEnabled(false);
final Button clear = new Button(comBtn,SWT.RIGHT);
clear.setText("重置");
SelectionListener listener = new SelectionListener(){
public void widgetDefaultSelected(SelectionEvent e) {
// TODO 自动生成方法存根
}
public void widgetSelected(SelectionEvent e) {
// TODO 自动生成方法存根
Widget w = e.widget;
if(w == bState_1){
if(tState_1.getText().trim().equals("")){
return ;
}
if(lState_1.getText().equals("未输入状态集")){
lState_1.setText("状态集:"+tState_1.getText()+",");
}else{
lState_1.append(tState_1.getText()+",");
}
//dialog.setType(1);
//dialog.open();
tState_1.setText("");
}else if(w == bLetter_1){
if(tLetter_1.getText().trim().equals("")){
return ;
}
if(tLetter_1.getText().trim().length() != 1){
MessageDialog.openError(null,"提示","字母表中输入的字母必须为一位");
return;
}
if(lLetter_1.getText().equals("未输入字母表")){
lLetter_1.setText("字母表:"+tLetter_1.getText()+",");
}else{
lLetter_1.append(tLetter_1.getText()+",");
}
tLetter_1.setText("");
}else if(w == bFunction_1){
if(tFunction_1.getText().trim().equals("") || tFunction_2.getText().trim().equals("")
|| tFunction_3.getText().trim().equals("")){
return ;
}
if(lFunction_1.getText().equals("未输入转换函数")){
lFunction_1.setText("转换函数:("+tFunction_1.getText()+","+tFunction_2.getText()
+") = "+tFunction_3.getText()+", ");
}else{
lFunction_1.append(" ("+tFunction_1.getText()+","+tFunction_2.getText()
+") = "+tFunction_3.getText()+", ");
}
if(--funLine ==0){
funLine =6;
lFunction_1.append("\n");
}
//tFunction_1.setText("");
//tFunction_2.setText("");
//tFunction_3.setText("");
}else if(w == bFirState_1){
if(tFirState_1.getText().trim().equals(""))
return;
if(lFirState_1.getText().equals("未输入初始状态")){
lFirState_1.setText("初始状态:"+tFirState_1.getText());
}
bFirState_1.setEnabled(false);
}else if(w == bEndState_1){
if(tEndState_1.getText().trim().equals("")){
return;
}
if(lEndState_1.getText().equals("未输入终止状态")){
lEndState_1.setText("终止状态:"+tEndState_1.getText()+",");
}else{
lEndState_1.append(tEndState_1.getText()+",");
}
tEndState_1.setText("");
}else if(w == sure){
Vector states = analyzeStates(lState_1.getText());
Vector letters = analyzeLetters(lLetter_1.getText());
Hashtable functions = analyzeFunctions(lFunction_1.getText());
Vector endStates = analyzeStates(lEndState_1.getText());
String temp = lFirState_1.getText();
String firState = temp.substring(temp.indexOf(":")+1,temp.length());
if(firState.indexOf("未输入") != -1){
firState = "";
}
machine = new AutoMachine(txtLabel.getText());
machine.Init(states, letters, functions, firState, endStates,threeRow);
if(! machine.isValidate() || !isValidate(txtLabel.getText(),states,letters,functions,firState,endStates)){
MessageDialog.openError(null,"提示","自动机无法正常初始化");
return;
}
AutoMachineFactory.getInstance().add(machine);
OldZdj.selectionChanged();
modify.setEnabled(true);
clear();
//init();
}else if(w == modify){
IViewPart vp = getViewSite().getPage().findView(IAppConstants.OLD_ZDJ_VIEW_ID);
Table table = ((OldZdj)vp).getTableViewer().getTable();
if(table.getSelectionIndex() == -1){
MessageDialog.openInformation(null,"提示","请先在左边选择要删除的自动机");
return;
}
machine = (AutoMachine)table.getItem(table.getSelectionIndex()).getData();
AutoMachineFactory.getInstance().remove(machine);
OldZdj.selectionChanged();
if(AutoMachineFactory.getInstance().getMachines().size() ==0)
modify.setEnabled(false);
}else if(w == clear){
clear();
}
}
private boolean isValidate(String text, Vector states, Vector letters, Hashtable functions,String firState, Vector endStates) {
// TODO 自动生成方法存根
if(text.trim().equals("")||states.size() == 0||letters.size() ==0
||functions == null||firState.trim().equals("")||endStates.size()==0)
return false;
return true;
}
private void clear(){
txtLabel.setText("");
lState_1.setText("未输入状态集");
lLetter_1.setText("未输入字母表");
lFunction_1.setText("未输入转换函数");
lFirState_1.setText("未输入初始状态");
lEndState_1.setText("未输入终止状态");
bFirState_1.setEnabled(true);
}
private void init(){
lState_1.setText("q0,q1,q2,q3,");
lLetter_1.setText("a,b,");
lFirState_1.setText("q0");
lEndState_1.setText("q3,");
}
};
bState_1.addSelectionListener(listener);
bFunction_1.addSelectionListener(listener);
bFirState_1.addSelectionListener(listener);
bLetter_1.addSelectionListener(listener);
bEndState_1.addSelectionListener(listener);
sure.addSelectionListener(listener);
modify.addSelectionListener(listener);
clear.addSelectionListener(listener);
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addSelectionListener(this);
}
private Vector analyzeLetters(String letters){
letters = letters.substring(0,letters.length()-1);
String[] array = letters.split(",");
Vector<Character> letter = new Vector<Character>();
if(array.length ==1 && array[0].trim().indexOf("未输入") != -1){
return letter;
}
for(int i=0;i<array.length;i++){
if(i==0){
String temp = array[i];
letter.add((temp.substring(temp.indexOf(":")+1, temp.length())).charAt(0));
continue;
}
letter.add(array[i].charAt(0));
}
//MessageDialog.openError(null,"提示",letter.toString());
return letter;
}
private Vector analyzeStates(String states){
states = states.substring(0,states.length()-1);
String[] array = states.split(",");
Vector state = new Vector();
if(array.length ==1 && array[0].trim().indexOf("未输入") != -1){
return state;
}
for(int i=0;i<array.length;i++){
if(i==0){
String temp = array[i];
state.add(temp.substring(temp.indexOf(":")+1, temp.length()));
continue;
}
state.add(array[i]);
}
//MessageDialog.openError(null,"提示",state.toString());
return state;
}
private Hashtable analyzeFunctions(String functions){
functions = functions.trim().substring(0,functions.trim().length()-1);
String[] array = functions.split(", ");
Hashtable funs = new Hashtable();
if(array.length ==1 && array[0].trim().equals("未输入转换函数")){
return null;
}
for(int i=0;i<array.length;i++){
String fun = array[i];
int pos_one = fun.indexOf("(");
int pos_two = fun.indexOf(",");
int pos_thr = fun.indexOf(")");
int pos_fou = fun.indexOf("=");
String one = fun.substring(pos_one+1, pos_two).trim();
char two = fun.substring(pos_two+1, pos_thr).trim().charAt(0);
String three = fun.substring(pos_fou+1,fun.length()).trim();
Hashtable temp = new Hashtable();
temp.put(two,three);
if(!funs.containsKey(one)){
Vector<Hashtable> vecTemp = new Vector<Hashtable>();
vecTemp.add(temp);
funs.put(one, vecTemp);
}else{
Vector vecTemp = (Vector)funs.get(one);
vecTemp.add(temp);
}
if(threeRow == null)
threeRow = new Vector();
String row = one+":"+two+":"+three;
threeRow.add(row);
//MessageDialog.openError(null,"提示",one+":"+two+":"+three);
//MessageDialog.openError(null,"提示",temp.toString());
}
//MessageDialog.openError(null,"提示",""+array.length);
return funs;
}
@Override
public void setFocus() {
// TODO 自动生成方法存根
}
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
// TODO 自动生成方法存根
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -