因为项目需求,在条码解析中,需要获取在数据库中配置好的格式规则,主要就是解析规则,然后在新的条码进来后,DBA需要把对应的规则配置上去,但是DBA不知道该条码在此种规则下解析出来的数据是什么,然后就找程序员给解析。多次处理好,决定写一个小工具个给DBA,让他自己操作。同时也好久没有碰过Swing了,个人还是蛮喜欢Swing类库的。代码其实简单,写一个main方法,然后导出jar包,最后转成exe可执行程序。
1 界面
2 代码
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { show(); } private static void show() { JFrame.setDefaultLookAndFeelDecorated(true); // 创建及设置窗口 final JFrame frame = new JFrame("条码解析测试"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); frame.setLayout(new BorderLayout()); JPanel panel = new JPanel (); panel.setLayout(new GridLayout(4,1)); frame.add(panel); JPanel panel1 = new JPanel(); JLabel userLabel = new JLabel("正则表达式:"); userLabel.setBounds(10,20,80,25); panel1.add(userLabel); final JTextField userText = new JTextField(20); userText.setBounds(100,20,165,25); panel1.add(userText); panel.add(panel1); JPanel jPanel2 = new JPanel(); JLabel userLabel1 = new JLabel("待匹配数据:"); userLabel1.setBounds(10,50,80,25); jPanel2.add(userLabel1); final JTextField userText1 = new JTextField(20); userText1.setBounds(100,50,165,25); jPanel2.add(userText1); panel.add(jPanel2); final JTextArea jTextArea = new JTextArea(); JScrollPane jScrollPane = new JScrollPane(jTextArea); //分别设置水平和垂直滚动条自动出现 jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); JPanel jPanel3 = new JPanel(); JButton jButton1 = new JButton("默认"); jButton1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { userText.setText("(.*)@P(\\w+)@1P(.*)@Q(\\d*)NAR(.*)@1T(\\w+)@2T(.*)"); userText1.setText("[)>@06@12S0002@PA2C0230680000@1PCR16-101FV@31PCR16-101FV@12V691669758@10VJPN-ASAHI@2P01@20P101,F,CR16@6D20180814@14D20200814@30PY@Z2@K5500099254@16K0@V700006603@3SS180811151004@Q5000NAR000@20T1@1TK80808L204@2T@1Z1808111510@@ "); } }); jPanel3.add(jButton1); JButton loginButton = new JButton("解析"); //loginButton.setBounds(10, 100, 20, 25); loginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String reg = userText.getText(); if(reg.length()==0){ JOptionPane.showMessageDialog( frame, "正则表达式不能为空!"); return; } String str = userText1.getText(); Pattern p = Pattern.compile(reg); Matcher m = p.matcher(str); if(m.matches()){ jTextArea.setText(""); int count= m.groupCount(); StringBuilder sb = new StringBuilder("成功匹配 "+count+" 组,分别是:\r\n"); jTextArea.append("成功匹配 "+count+"组,分别是:\r\n"); for(int i=1;i<=count;i++ ){ jTextArea.append("第"+i+"组:"+ m.group(i)+"\r\n"); } }else{ jTextArea.setText("不匹配"); } } }); jPanel3.add(loginButton); JButton jButton = new JButton("清空"); jButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { userText.setText(""); userText1.setText(""); jTextArea.setText(""); } }); jPanel3.add(jButton); panel.add(jPanel3); jTextArea.setBounds(10,150,250,100); jTextArea.setLineWrap(true); jTextArea.setWrapStyleWord(true); jTextArea.setEditable(false); panel.add(jScrollPane); frame.getContentPane().add(panel); // 显示窗口 frame.setResizable(false); frame.setVisible(true); } }
3 程序太简单了,没什么可说,仅做备份。