「状态flowjava」状态flow什么意思
今天给各位分享状态flowjava的知识,其中也会对状态flow什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
什么是JAVA工作流引擎
正好我也在学习工作流引擎。
工作流是业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现组织成员间的协同工作,以达到业务的整体目标。
工作流管理系统是支持企业经营过程高效执行并监控其执行过程的计算机软件系统。
典型的WFMS至少由如下几个模块组成:业务流程建模定义工具、过程定义、工作流执行环境(引擎)、任务管理。当然还会包括应用和IT工具。
常用的工作流引擎有osworkflow,jbpm,shark。刚学习了一点osworkflow,现在转向jbpm,公司要求,没办法。
osworkflow,最大特点就是灵活,这个网上都说遍了。也就是说它提供了一个引挚,在此基础上你可以进行扩展,可以自已写一些条件、动作类,只是继承它的接口就行,不需要修改它的源代码。他只提供一个工作流控制框架给你,他也只专注于管理工作流自身的东西,对其他的东西不管,其他的功能对他来说都只是一个插件组件。所以你可以自己扩展里面的功能,例如用户管理模式,工作流本身不带用户模式,他公司的另外一个项目osuser,可以结合使用来管理用户权限,当然你可以不用osuer,自己建立自己的用户模式,其实就是建立自己的运行判断条件;支持多种插件式的持久化机制;他的数据表也很少,就三个……
下面是引用其他网页的话:
Shark的流程定义语言是XPDL,我们知道,XPDL的两个最重要的概念是Process和Activity。XPDL中的Activity是基于UML1.x中的活动图的概念。活动图天生的适于工作流程建模,它相对于状态图的一个最大的优点是容易做并发线程的分叉控制,这些并发线程可以同时执行也可以顺序执行;它还有一个优点是有泳道的概念,可以控制工作流引擎中的任务的产生。Shark的如来神掌是活动图。
Osworkflow的如来神掌又是什么呢?我们知道,它有个重要概念是State……呵呵,我们知道了,它的如来神掌是FSM。不知道FSM是什么东西??那你读大学时肯定不是好学生;当然了,不知道也不打紧,你把他类似理解为状态图就可以了。Osworkflow中的State是由step和status联合表达的,一个State就是一个step中的某个status;而state的转换由action来驱动,类似状态图中的event,因为一个event对应一个action嘛。
Jbpm的如来神掌就没有上面的简单了,它结合应用了状态图+活动图+PetriNet的知识,而且,这里的活动图还是UML2.0版的。UML2.0的活动图中,节点不叫活动(Activity)而叫动作(action),活动成了一个高层次的概念,它包含一个动作序列。一个活动图展现一系列的动作,这些动作组成了活动。Jbpm把action也改名了,称为state。Jbpm使用的状态图的概念有transition/event等,这个自己去看吧。Jbpm来内部实现中还采用了PetriNet的概念,如token,signal等。什么?又不知道PetriNet什么东东?那你大学是学计算机的吗?不是?那你可能是学文科的,学机械/电气/土木工程/交通运输等专业都有接触PetriNet的课程,如果没有学过,还是看看jbpm吧,反正我们也不搞理论,知道大致概念就行。
用JAVA语言编程实现一个用户登录窗口
方法一:
采用JOptionPane中的一个非常有用的静态方法 showOptionPane();
源码如下:
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;
import javax.swing.BoxLayout;
import javax.swing.Box;
import javax.swing.BorderFactory;
public class Login1 {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
static void createAndShowGUI() {
JFrame mainFrame = new JFrame();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setBounds(250,250,400,300);
mainFrame.setVisible(false);
usernameField = new JTextField(10);
passwordField = new JPasswordField(10);
Object[] options = {"登录","取消"};
int i = JOptionPane.showOptionDialog(null,createLoginPanel(),"登录信息",JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE,null,options,options[0]);
if(i==0) {
String username = usernameField.getText();
String password = passwordField.getText();
if(!username.equals("") !password.equals("")) {
mainFrame.getContentPane().add(new JLabel("用户名:"+username+" 密码是:"+password,JLabel.CENTER));
mainFrame.show();
}
else {
JOptionPane.showMessageDialog(null,"用户名和密码不能为空","提示",JOptionPane.WARNING_MESSAGE);
System.exit(1);
}
}
else System.exit(0);
}
static JPanel createLoginPanel() {
JPanel ret = new JPanel();
JPanel usernamePanel = new JPanel();
usernamePanel.add(new JLabel("用户名:",JLabel.RIGHT));
usernamePanel.add(usernameField);
JPanel passwordPanel = new JPanel();
passwordPanel.add(new JLabel("密 码:",JLabel.RIGHT));
passwordPanel.add(passwordField);
Box box = new Box(BoxLayout.Y_AXIS);
box.add(usernamePanel); box.add(passwordPanel);
ret.add(box);
ret.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(244,144,44)),"填写登录信息"));
return ret;
}
static JFrame mainFrame = null;
static JTextField usernameField = null;
static JPasswordField passwordField = null;
}
运行:
javac -deprecation Login1.java
java Login
(因为有一个过期的API,所以用了 -deprecation 命令)
方法二,使用了两个JFrame类共同实现,第一次显示第一个frame,当点了登录后且操作合法时,第一个窗口就被释放了 dispose();再显示第二个窗口:
源码如下:
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
public class Login2 {
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
static void createAndShowGUI() {
//////////////////////////////////////////////////////////////
loginWindow = new JFrame("登录信息");
loginWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loginWindow.setBounds(350,350,250,200);
loginWindow.setResizable(false);
JPanel usernamePanel = new JPanel();
usernamePanel.add(new JLabel("用户名:",JLabel.CENTER));
usernamePanel.add(usernameField);
JPanel passwordPanel = new JPanel();
passwordPanel.add(new JLabel("密 码:",JLabel.CENTER));
passwordPanel.add(passwordField);
Box box = new Box(BoxLayout.Y_AXIS);
box.add(usernamePanel); box.add(passwordPanel);
JPanel infoPanel = new JPanel();
infoPanel.add(box);
infoPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(244,144,44)),"填写登录信息"));
JButton submitButton = new JButton("登录");
JButton cancelButton = new JButton("取消");
submitButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String username = usernameField.getText();
String password = passwordField.getText();
if(!username.equals("") !password.equals("")) {
loginWindow.dispose();
mainFrame.getContentPane().add(new JLabel("用户名:"+username+" 密码是:"+password,JLabel.CENTER));
mainFrame.setVisible(true);
}
else {
JOptionPane.showMessageDialog(null,"用户名和密码不能为空","提示",JOptionPane.WARNING_MESSAGE);
System.exit(1);
}
}
});
cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.add(submitButton); buttonPanel.add(cancelButton);
loginWindow.getContentPane().add(infoPanel,BorderLayout.CENTER);
loginWindow.getContentPane().add(buttonPanel,BorderLayout.SOUTH);
loginWindow.getContentPane().add(new JPanel(),BorderLayout.EAST);
loginWindow.getContentPane().add(new JPanel(),BorderLayout.WEST);
loginWindow.setVisible(true);
/////////////////////////////////////////////////////////////////
mainFrame = new JFrame();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setBounds(250,250,400,300);
mainFrame.setVisible(false);
}
static JFrame loginWindow,mainFrame;
static final JTextField usernameField = new JTextField(10);
static final JPasswordField passwordField = new JPasswordField(10);
}
运行:
javac -deprecation Login2.java
java Login2
Java 两个按钮不同状态切换
一: 首先对需求进行分析:
两个不同的按钮,
两个事件接收器,
当按钮被点击后, 事件接收器接受到点击信息, 然后进行事件处理逻辑---修改按钮的状态
二: 其次 对需要用的知识进行分析
A. 按钮状态的设置
按钮的状态-----不可见-----通过设置属性是否可见实现
JButton button1 = new JButton("按钮一");
button1.setVisible(false); //设置为不可见的状态
按钮的状态-----不可用-----通过设置属性是否用实现
JButton button2 = new JButton("按钮二");
button2.setEnabled(false); //设置为不可用的状态
B. 事件的接收器的设置, 已经书写
一般使用匿名内部类来书写接收器, 以及处理代码
button.addActionListener(new ActionListener() {//为按钮添加事件接收器
public void actionPerformed(ActionEvent e) {
//这里写事件处理代码
}
});
三: 效果图
当点击按钮一的效果图
当点击按钮二的效果图
四: 参考代码
//导入所需要的包
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FrameDemo extends JFrame {
//申明需要操作的按钮控件
private final JButton button1,button2;
public FrameDemo() {
setTitle("按钮测试窗口");//设置窗口标题
setSize(220, 80);//设置窗口的大小
setLocationRelativeTo(null);//设置窗口居于屏幕中央
setDefaultCloseOperation(EXIT_ON_CLOSE);//设置点击关闭时退出虚拟机
setLayout(new FlowLayout());//布局窗口为流式布局
button1 = new JButton("按钮一");
button2 = new JButton("按钮二");
button1.addActionListener(new ActionListener() {//为按钮一设置事件接收器
public void actionPerformed(ActionEvent e) {
button1.setVisible(false);//当按钮一被点击时,该按钮设置为不可见
}
});
button2.addActionListener(new ActionListener() {//为按钮二设置事件接收器
public void actionPerformed(ActionEvent e) {
button2.setEnabled(false);//当按钮二被点击时,该按钮设置为不可用
}
});
JPanel jp = new JPanel(new GridLayout(1, 2));
jp.add(button1);
jp.add(button2);
add(jp);
}
public static void main(String[] args) {
new FrameDemo().setVisible(true);//创建按钮窗口,并且设置为可见
}
}
五: 拓展思考
java 的源代码一般都遵循java 的规范,
属性的设置使用setXXX(...)方法
属性的获得使用getXxx(); 方法
使用的时候, 可以很方便的调用
所以, 我们平时开发java的时候也应该遵循java开发的规范. 会给我们的工作带来很多的便利
java按钮触发事件问题
可以使用按钮单击事件,改变其它组件的状态,例如下面是一个计数器的例子:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Demo7 extends JFrame {
private int count = 1;
public Demo7() {
this.setSize(600, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setLayout(new FlowLayout());
JLabel label = new JLabel(String.valueOf(count));
this.add(label);
JButton button = new JButton("Click Me!");
// 按钮单击事件,改变 Label 显示文本
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
count++;
label.setText(String.valueOf(count));
}}
);
this.add(button);
}
public static void main(String[] args) {
new Demo7().setVisible(true);
}
}
状态flowjava的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于状态flow什么意思、状态flowjava的信息别忘了在本站进行查找喔。
发布于:2022-11-27,除非注明,否则均为
原创文章,转载请注明出处。