• 17.5


    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    
    import javax.swing.*;
    
    public class Test_17_5 extends JFrame{
        private JPanel jpHold = new JPanel();
        private JLabel jlb = new JLabel("Text file");
        private JTextField jtf = new JTextField(10);
        private JP jp = new JP();
        private File file;
        StringBuffer str = new StringBuffer();
        
        public Test_17_5(){
            jpHold.setLayout(new FlowLayout());
            jpHold.add(jlb);
            jpHold.add(jtf);
            
            setLayout(new BorderLayout(5,5));
            add(jpHold,BorderLayout.SOUTH);
            add(jp,BorderLayout.CENTER);    
            
            jtf.addKeyListener(new KeyAdapter(){
    
                @Override
                public void keyPressed(KeyEvent e) {
                    // TODO Auto-generated method stub
                    if(e.getKeyCode() == KeyEvent.VK_ENTER)
                    {                    
                        try {
                            jp.showHistogram(countLetters());
                        } catch (FileNotFoundException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                    }
                }            
            });    
        }
        private String getTextContent() throws FileNotFoundException{
            
            file = new File(jtf.getText());
            Scanner input;
            if(file.exists() && file.canRead()){
                input = new Scanner(file);
                while(input.hasNext()){
    //                string= input.nextLine();
                    str.append(input.nextLine());
                }
            }
            return str.toString();
        }
        private int[] countLetters() throws FileNotFoundException{            
            int[] count = new int[26];
            String text = getTextContent();
            for(int i = 0; i < text.length(); i++){
                char character = text.charAt(i);
                
                if((character >= 'A') && (character <= 'Z')){
                    count[character - 'A']++;
                }
                else if((character >= 'a') && (character <= 'z')){
                    count[character - 'a']++;
                }
            }    
            return count;
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Test_17_5 frame = new Test_17_5();
            frame.setTitle("Test_17_5");
            frame.setSize(400,500);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);        
        }
        
        
        class JP extends JPanel{
            private int[] count;
            
            public void showHistogram(int[] count){
                this.count = count;
                repaint();
            }        
            
            protected void paintComponent(Graphics g){
                if(count == null) return;
                
                super.paintComponent(g);
                
                int width = getWidth();
                int height = getHeight();
                int interval = (width - 40)/ count.length;
                int individualWidth = (int)(((width - 40) / 24) * 0.6);
                
                int maxCount = 0;
                for(int i = 0; i < count.length; i++){
                    if(maxCount < count[i])
                        maxCount = count[i];
                }
                
                int x = 30;
                
                g.drawLine(10, height - 45, width - 10, height - 45);
                for(int i = 0; i < count.length; i++){
                    int barHeight = (int)(((double)count[i] / (double)maxCount) * (height - 55));
                    
                    g.drawRect(x, height - 45 - barHeight, individualWidth, barHeight);
                    g.drawString((char)(65 + i) + "", x, height - 30);
                    
                    x += interval;
                }
            }
        }
    }
    View Code

    效果图:                                                                                  需要注意的地方:之前错误的使用了StringBuffer StringBuilder,导致程序一运行即错误,如下图: 

                                               

  • 相关阅读:
    微信小程序开发框架技术选型
    WebApiThrottle限流框架使用手册
    MicroService 微服务架构模式简述
    .net Core 微服务框架 surging 使用
    C#最佳工具集合:IDE、分析、自动化工具等
    神经网络编程入门
    ABP+AdminLTE+Bootstrap Table aspnetboilerplate 学习
    转 Web用户的身份验证及WebApi权限验证流程的设计和实现
    C# 调用webservice 几种办法(转载)
    C++ sort函数用法
  • 原文地址:https://www.cnblogs.com/wanjiang/p/5751538.html
Copyright © 2020-2023  润新知