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); } }