• 第十三周编程总结


    记事本:

    package A;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.InputEvent;
    import java.awt.event.KeyEvent;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    
    import javax.swing.*;
    
    public class Notepad implements ActionListener {
          JFrame frame;
          JMenuBar bar;
          JMenu fileMenu,editMenu;
          ImageIcon newIcon,openIcon,saveIcon,closeIcon;
          JMenuItem newItem,openItem,saveItem,closeItem;
          JTextArea jta;
          JScrollPane scroll;
          File file;
          
          public Notepad() {
        	  frame=new JFrame("谢思敏");
        	  bar=new JMenuBar();
        	  fileMenu=new JMenu("文件");
        	  editMenu=new JMenu("编辑");
        	  jta=new JTextArea(); 
        	  scroll=new JScrollPane(jta,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        	  newIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"1.png");
        	  openIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"2.png");
        	  saveIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"3.png");
        	  closeIcon=new ImageIcon("f:"+File.separator+"tupian"+File.separator+"4.png");
        	  newItem=new JMenuItem("新建(N)",newIcon);
        	  openItem=new JMenuItem("打开(O)",openIcon);
        	  saveItem=new JMenuItem("保存(S)",saveIcon);
        	  closeItem=new JMenuItem("关闭(C)",closeIcon);
        	  
        	  newItem.setMnemonic(KeyEvent.VK_N);
        	  openItem.setMnemonic(KeyEvent.VK_O);
        	  saveItem.setMnemonic(KeyEvent.VK_S);
        	  closeItem.setMnemonic(KeyEvent.VK_C);
        	  
        	  newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
        	  openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
        	  saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
        	  closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
        	  
        	  newItem.addActionListener(this);
        	  openItem.addActionListener(this);
        	  saveItem.addActionListener(this);
        	  closeItem.addActionListener(this);
        	  bar.add(fileMenu);
        	  bar.add(editMenu);
        	  fileMenu.add(newItem);
        	  fileMenu.add(openItem);
        	  fileMenu.add(saveItem);
        	  fileMenu.add(closeItem);   	  
        	  frame.add(scroll);
        	  frame.setJMenuBar(bar);
        	  frame.setVisible(true);
        	  frame.setSize(400, 300);
          }
    
    	@Override
    	public void actionPerformed(ActionEvent event) {
    		Object obj=event.getSource();
    		if(obj instanceof JMenuItem) {
    			JMenuItem item=(JMenuItem)obj;
    			if(item==newItem) {
    				new Notepad();
    			}else if(item==openItem) {
    				JFileChooser chooser = new JFileChooser();
    				chooser.showOpenDialog(null);
    				file=chooser.getSelectedFile();
    				try {
    					FileInputStream fis = new FileInputStream(file);
    					byte[] b=new byte[fis.available()];
    					fis.read(b);
    					jta.append(new String(b));
    					fis.close();
    				}catch(FileNotFoundException e) {
    					e.printStackTrace();
    				} catch (IOException e) {				
    					e.printStackTrace();
    				}
    			}else if(item==saveItem) {
    				JFileChooser chooser = new JFileChooser();
    				chooser.showSaveDialog(null);
    				file=chooser.getSelectedFile();
    				if(!file.exists()) {
    					try {
    						file.createNewFile();
    					}catch (IOException e) {
    						e.printStackTrace();
    					}
    				}
    			}else if(item==closeItem) {
    				System.exit(0);
    			}
    		}
    		
    	}
    }
    

    截图:




    学习总结:

    对于编写记事本来说使用最多的是菜单组件和动作监听器的应用。至于这周所学
    1.菜单组件:

    public void setMnemonic(int mnemonic)
    

    这个方法可以设置键盘助记字符,不过该方法的使用是依赖Swing组件的菜单分层结构的,也就是说设置了该助记字符的菜单项目必须已经展开了,才能使用(通过和Alt+键结合使用).
    值得注意的是 setMnemonic 并非是JMenuItem的方法,而是来着他的父类AbstractButton的,所以该方法通常是不应用于菜单项的。
    JMenuItem自身有一个方法 public void setAccelerator(KeyStroke keyStroke) 该方法的功能要比上面的那个方法要强大,该方法可以设置菜单项的快捷键,它是不依赖菜单的分层结构的。
    列如:

    JFrame jf=new JFrame("窗口测试");
            
            JMenuBar bar=new JMenuBar();
            JMenu file=new JMenu("菜单   ");
            JMenuItem createfile=new JMenuItem("创建文件");
            
            createfile.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK));
            createfile.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    System.out.println("创建文件被点击");
                }
            });
            
            file.add(createfile);
            bar.add(file);
            
            jf.setJMenuBar(bar);
            jf.pack();
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jf.setVisible(true);
    

    2.带滚动条的文本框
    需注意的有两点:
    1.默认的滚动条,仅在输入的文本超过文本框时才会显示。。没有超过文本框是不会显示的;
    2.设置矩形大小,是在滚动条上设置,而不是在文本框上设置;
    列如:

    public class MainView extends JFrame{
      public static void main(String[] args) {
        MainView mv=new MainView();
        mv.setLayout(null);
        //实例化文本框
        JTextArea jta= new JTextArea();
        //在文本框上添加滚动条
            JScrollPane jsp = new JScrollPane(jta);
            //设置矩形大小.参数依次为(矩形左上角横坐标x,矩形左上角纵坐标y,矩形长度,矩形宽度)
            jsp.setBounds(13, 10, 350, 340);
            //默认的设置是超过文本框才会显示滚动条,以下设置让滚动条一直显示
            jsp.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            //把滚动条添加到容器里面
            mv.add(jsp);
            mv.setSize(400, 400);
            mv.setVisible(true);
            mv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
     
    }
    
  • 相关阅读:
    分布式锁原理及实现方式
    【FAQ】Maven 本地仓库明明有jar包,pom文件还是报错解决办法
    【FAQ】tomcat启动jdk版本不一致
    【Map,HashMap,Vector,List】资料汇总
    【FAQ】调用接口序列化问题
    【docker】docker下安装mysql
    linux tcpdump抓包Post请求
    Springboot 在@Configuration注解的勒种 使用@Autowired或者@value注解 读取.yml属性失败
    Springboot使用Shiro-整合Redis作为缓存 解决定时刷新问题
    CentOS yum 安装nginx
  • 原文地址:https://www.cnblogs.com/fengmixinluo/p/11913059.html
Copyright © 2020-2023  润新知