有条理的写java界面程序


1.学习目的:有条理的写java界面程序(学习自https://nonsensersunny.github.io/)

字符匹配

package com.example;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class StringMatching extends JFrame{
    private static final long serialVersionUID = 1L;//序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性

    private JFrame jf=new JFrame("标题:charMatching");
    //提醒字符
    private JLabel l1=new JLabel("Pattern Strng:");//JLabel对象可显示文本,图片
    private JLabel l2=new JLabel("Text resource");
    private JLabel l4=new JLabel("resource");

    private JLabel l3=new JLabel("choose pattren");
    //定义菜单
    private JComboBox pattern=new JComboBox();//下拉框

    //资源与结果框
    private JTextArea result=new JTextArea();
    private JTextArea resource=new JTextArea();

    //某种绑定
    private  JScrollPane jp2=new JScrollPane(result);
    private JScrollPane jp=new JScrollPane(resource);//JScrollPane 管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口,

    //输入查询字符框
    private JTextField  patternInput=new JTextField();//JTextField 是一个轻量级组件,它允许编辑单行文本

    //按钮
    private JButton find=new JButton();
    private JButton clear=new JButton();

    private JFileChooser chooser=new JFileChooser();

    //构造函数
    Demo(){
        setFrame();
        setTextFields();
        setMenu();
        setButton();

    }
    //设置主界面
    void setFrame(){
        jf.setSize(600,600);
        jf.setResizable(false);//窗体是否自由变换大小
        jf.setVisible(true);//窗口显示
        jf.setLayout(null);//未设置layout 系统默认flowLayout布局 null清除布局管理器
        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置用户在此窗体上发起 "close" 时默认执行的操做

    }
    //添加文本域
    void setTextFields(){
        l1.setBounds(20,90,100,30);//setBounds(x,y,width,height); x:组件在容器X轴上的起点
        // y:组件在容器Y轴上的起点 width:组件的长度 height:组件的高度
        jf.add(l1);

        patternInput.setBounds(120,30,200,25);
        jf.add(patternInput);
        patternInput.setCaretColor(Color.CYAN);//设置符号颜色
        patternInput.setSelectedTextColor(Color.YELLOW);//设置搜索字符颜色

        l2.setBounds(20,90,100,30);
        jf.add(l2);

        resource.setLineWrap(true);//设置文本区的换行策略(句子换行)
        resource.setWrapStyleWord(true);//单词换行true
        resource.setEditable(false);
        resource.setCaretColor(Color.YELLOW);
        resource.setSelectedTextColor(Color.BLUE);////设置文本框被选择颜色
        //resource的异常处理
        try{
            @SuppressWarnings("resource")//有了suppresswarning这个批注,可以取消一些特定代码段中的警告,比如你看到警告,你查了一下,发现他不是问题,
            // 可是你为了好看又不想让他报警,就可以加这个批注。
                    BufferedReader br=new BufferedReader(new FileReader(new File("txtFile/cache.txt")));
                    resource.setText("\n\n\n\n\n");//正则表达式
                    while (br.readLine()!=null){
                        resource.setText(resource.getText()+"\n"+br.readLine()+"\n");
                    }

        }catch(Exception e){
                   e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
        }

        //jp对象传入的参数为resource
        jp.setBounds(20,120,300,400);
        jf.add(jp);

        l4.setBounds(370,95,100,25);
        jf.add(l4);
        //result
        result.setLineWrap(true);//设置文本区的换行策略(句子换行)
        result.setWrapStyleWord(true);//单词换行true
        result.setEditable(false);
        result.setSelectedTextColor(Color.getHSBColor(1,400,100));////设置文本框被选择颜色
        //jp2对象传入的参数为result
        jp2.setBounds(20,90,100,30);
        jf.add(jp2);

     //完工

    }
    //设置下拉菜单
    void setMenu(){
        l3.setBounds(370,30,100,25);
        jf.add(l3);
        pattern.addItem("Choose File");
        pattern.addItem("Chinese Demo");
        pattern.addItem("English Demo");
        pattern.addItem("Custom");
        //给下拉框设置监听事件
        pattern.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent itemEvent) {
                if(pattern.getSelectedItem().toString()=="Chinese Demo"){
                    resource.setText("InPut your text");
                    resource.setText(null);
                    result.setText(null);

                    try{
                        @SuppressWarnings("resource")//有了suppresswarning这个批注,可以取消一些特定代码段中的警告,比如你看到警告,你查了一下,发现他不是问题,
                                // 可是你为了好看又不想让他报警,就可以加这个批注。
                                BufferedReader br=new BufferedReader(new FileReader(new File("txtFile/cache.txt")));
                        int i=1;
                        while (br.readLine()!=null){
                            resource.setText(resource.getText()+"\n"+br.readLine()+"\n");
                            i++;
                        }

                    }catch(Exception e2){
                        e2.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
                    }

                }
                else if(pattern.getSelectedItem().toString()=="English Demo"){
                    resource.setText("InPut your text");
                    resource.setText(null);
                    result.setText(null);

                    try{
                        @SuppressWarnings("resource")//有了suppresswarning这个批注,可以取消一些特定代码段中的警告,比如你看到警告,你查了一下,发现他不是问题,
                                // 可是你为了好看又不想让他报警,就可以加这个批注。
                                BufferedReader br=new BufferedReader(new FileReader(new File("txtFile/cache.txt")));
                        int i=1;
                        while (br.readLine()!=null){
                            resource.setText(resource.getText()+"\n"+br.readLine()+"\n");
                            i++;
                        }

                    }catch(Exception e2){
                        e2.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
                    }

                }
                else if(pattern.getSelectedItem().toString()=="Choose File"){
//                  resource.setText("Choose File");
                    resource.setText(null);
                    result.setText(null);
                    chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
                    chooser.showOpenDialog(null);
                    if(chooser.getSelectedFile().exists()&&chooser.getSelectedFile().canRead()){
                        try {
                            @SuppressWarnings("resource")
                            BufferedReader br=new BufferedReader(new FileReader(chooser.getSelectedFile()));
                            int i=1;
                            while(br.readLine()!=null){
                                resource.setText(resource.getText().trim()+"\n"+i+"—"+br.readLine());
                                i++;
                            }
                        } catch (Exception e2) {
                            e2.printStackTrace();// TODO: handle exception
                        }
                    }
                }
                else {
                    resource.setEditable(true);
                }
            }
        });
        //下拉框监听器在此结束

    }
    //设置按钮点击事件
    void setButton(){
        find.setBounds(370,65,90,25);
        jf.add(find);
        find.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                String sourceString=resource.getText();
                String patternString=patternInput.getText();
                String s[]=sourceString.split("\n");//分割字符串sourceString到s[]
                result.setText("teh text contains"+s.length+"lines");
                result.setText(result.getText()+"\nThe following line(s) contain(s) "+"\""+patternString+"\":");//没理解
                int no=0;
                for(int i=0;i

你可能感兴趣的:(有条理的写java界面程序)