第十三週編程總結

記事本:

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.菜單組件:java

public void setMnemonic(int mnemonic)

這個方法能夠設置鍵盤助記字符,不過該方法的使用是依賴Swing組件的菜單分層結構的,也就是說設置了該助記字符的菜單項目必須已經展開了,才能使用(經過和Alt+鍵結合使用).
值得注意的是 setMnemonic 並不是是JMenuItem的方法,而是來着他的父類AbstractButton的,因此該方法一般是不該用於菜單項的。
JMenuItem自身有一個方法 public void setAccelerator(KeyStroke keyStroke) 該方法的功能要比上面的那個方法要強大,該方法能夠設置菜單項的快捷鍵,它是不依賴菜單的分層結構的。
列如:app

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.設置矩形大小,是在滾動條上設置,而不是在文本框上設置;
列如:jsp

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);
    }
 
}
相關文章
相關標籤/搜索