java-編寫簡單的編輯器

本文編寫的編輯器模仿的是windows底下的記事本功能,並增加了高亮和自動保存的功能.


該編輯器功能如下:

  • 複製粘貼
  • 查找替換
  • 自動保存
  • 代碼高亮

這次只搭建簡單的框架,搭建出基本樣子

2016/03/12 更新
基本實現windows記事本功能,查找有錯。
(參考別人代碼,所以隨意轉載)

import java.awt.*;
import java.awt.event.*;
import java.awt.AWTEvent;
import java.awt.Font;
import java.text.*;
import java.util.*;
import java.io.*;
import java.io.IOException; 
import java.io.File; 
import javax.swing.undo.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.lang.reflect.Method;
import javax.swing.text.BadLocationException;

public class Editor extends JFrame{
	Container container = getContentPane();
		
	public ImageIcon icon = new ImageIcon("./lovexw.jpg");
	public Image image = icon.getImage();
	
	public JMenuBar menubar = new JMenuBar();
	public JMenu fileMenu,editMenu,formatMenu,viewMenu,helpMenu;
	public JMenuItem fileMenu_New,fileMenu_Open,fileMenu_Save,fileMenu_SaveAs,fileMenu_PageSetup,fileMenu_Print,fileMenu_Exit;
	public JMenuItem editMenu_Undo,editMenu_Redo,editMenu_Cut,editMenu_Copy,editMenu_Paste,editMenu_Delete,editMenu_Find,
     editMenu_GoTo,editMenu_SelectAll,editMenu_TimeDate;
	public JCheckBoxMenuItem formatMenu_LineWrap;
 	public JMenuItem formatMenu_Font;
 	public JCheckBoxMenuItem viewMenu_Status;
  	public JMenuItem helpMenu_Help,helpMenu_About;
  	public JTextArea editArea;
  	public JLabel statusLabel = new JLabel("Current Location is 1 row, 1 line",JLabel.RIGHT);
  	public JPopupMenu popupMenu;
  	public JMenuItem popupMenu_Undo,popupMenu_Redo,popupMenu_Cut,popupMenu_Copy,popupMenu_Paste,popupMenu_Delete,popupMenu_SelectAll;
	public JList list;	
	public String currentValue,oldValue;	
	public String oldpath = null;
	public boolean isNewFile = true;
	public Toolkit toolKit=Toolkit.getDefaultToolkit();
 	protected UndoManager undo = new UndoManager();
 	public Font newfont;
 	//protected UndoableEditListener undoHandler = new UndoHandler();
		
	public Editor(){
		super("windows notepad");
		
		JMenu fileMenu = new JMenu("File(F)",true);
		fileMenu.setMnemonic('F');
		fileMenu_New = new JMenuItem("New(N)", 'N');
		fileMenu_New.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
		fileMenu_New.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				currentValue = editArea.getText();
				if(currentValue.equals(oldValue)){
					editArea.setText("");
				}
				else{
					int result = JOptionPane.showConfirmDialog(null,"No Saved,Sure to create a new File?","Warning",JOptionPane.YES_NO_OPTION);
					if(result == JOptionPane.YES_OPTION){
						editArea.setText("");
					}
				}
			}
		});
		fileMenu_Open = new JMenuItem("Open(O)", 'O');
		fileMenu_Open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK));
		fileMenu_Open.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
					JFileChooser fileChooser = new JFileChooser(oldpath);
					//java file only
					FileNameExtensionFilter filter = new FileNameExtensionFilter("JAVA File","java");
    				fileChooser.setFileFilter(filter);
					//fileChooser's title
					fileChooser.setDialogTitle("Open File");

					int result = fileChooser.showOpenDialog(getParent());	//showOpenDialog(this) isn't right
					if(result == JFileChooser.APPROVE_OPTION){
				        String name = fileChooser.getSelectedFile().getName();
				        String path = fileChooser.getSelectedFile().getPath();
				        oldpath = path;
						int line = 1;
						File file = new File(path);
						BufferedReader reader = null;
						try{
							reader = new BufferedReader(new FileReader(file));
							String temstring = null;
							while((temstring = reader.readLine())!=null){
								editArea.append(line + " " + temstring);
								editArea.append("\n");
								line ++;
							}
							reader.close();
						}catch(IOException c){
							c.printStackTrace();
						}finally{
							if(reader != null){
								try{
									reader.close();
								}catch(IOException d){
								}
							}
						}
						statusLabel.setText("Current Location is " + line + " row, 1 line");
						oldValue = editArea.getText();
						resetTitle(name);
					}
			}
		});
		fileMenu_Save = new JMenuItem("Save(S)", 'S');
  		fileMenu_Save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK));
  		fileMenu_Save.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				if(isNewFile){
  					String str = null;
  					
  					JFileChooser fileChooser = new JFileChooser();
  					fileChooser.setDialogTitle("Save File");
  					
  					int result = fileChooser.showSaveDialog(getParent());
					File saveFileName = fileChooser.getSelectedFile();
  					if(result == JFileChooser.APPROVE_OPTION){
  						try{
  							FileWriter fw = new FileWriter(saveFileName + ".java");
  							oldpath = saveFileName.getPath();
  							BufferedWriter bfw = new BufferedWriter(fw);
  							bfw.write(editArea.getText(),0,editArea.getText().length());
  							bfw.flush();
  							isNewFile = false;
  							fw.close();
  							oldValue = editArea.getText();
  						}catch(IOException c){
  							
  						}
  					}
  				}
  				if(!oldValue.equals(editArea.getText())){
  					try{
  							FileWriter fw = new FileWriter(oldpath + ".java");
  							BufferedWriter bfw = new BufferedWriter(fw);
  							bfw.write(editArea.getText(),0,editArea.getText().length());
  							bfw.flush();
  							fw.close();
  							oldValue = editArea.getText();
  						}catch(IOException c){
  						}
  				}
  			}
  		});
  		fileMenu_SaveAs = new JMenuItem("Save As(A)...", 'A');
  		fileMenu_SaveAs.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				JFileChooser fileChooser = new JFileChooser("Save As");
  				FileNameExtensionFilter filter = new FileNameExtensionFilter("JAVA File","java");
  				fileChooser.setFileFilter(filter);
  				int result = fileChooser.showSaveDialog(getParent());
  				if(result == JFileChooser.APPROVE_OPTION){
  					File saveasfile = fileChooser.getSelectedFile();
  					try{
  							FileWriter fw = new FileWriter(saveasfile+".java");
  							BufferedWriter bfw = new BufferedWriter(fw);
  							bfw.write(editArea.getText(),0,editArea.getText().length());
  							bfw.flush();
  							isNewFile = false;
  							fw.close();
  							oldValue = editArea.getText();
  					}catch(IOException c){
  							
  					}
  				}
  			}
  		});
  		fileMenu_PageSetup = new JMenuItem("Page Setup(U)...",'U');
  		fileMenu_PageSetup.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				dialogShow();
  			}
  		});
 		fileMenu_Exit = new JMenuItem("Exit(X)",'X');
 		fileMenu_Exit.addActionListener(new ActionListener(){
 			public void actionPerformed(ActionEvent e){
 				if((isNewFile)||(!oldValue.equals(editArea.getText()))){
 					int result = JOptionPane.showConfirmDialog(null,"No Saved,Sure to Exit?","Warning",JOptionPane.YES_NO_OPTION);
 					if(result == JOptionPane.YES_OPTION){
 						System.exit(0);
 					}
 				}
 			}
 		});

		
		JMenu editMenu = new JMenu("Edit(E)",true);
		editMenu.setMnemonic('E');
		editMenu_Undo = new JMenuItem("Undo(U)",'U');
  		editMenu_Undo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK));
  		editMenu_Undo.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				if(undo.canUndo()){
  					try{
  						undo.undo();
  					}catch(CannotUndoException ex){
  						ex.printStackTrace();
  					}
  				}
  			}
  		});
  		editMenu_Redo = new JMenuItem("Redo(R)",'R');
  		editMenu_Redo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y,InputEvent.CTRL_MASK));
  		editMenu_Redo.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				if(undo.canRedo()){
  					try{
  						undo.redo();
  					}catch(CannotRedoException ex){
  						ex.printStackTrace();
  					}
  				}
  			}
  		});
  		editMenu_Cut = new JMenuItem("Cut(T)",'T');
  		editMenu_Cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK));
  		editMenu_Cut.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				editArea.cut();
  			}
  		});
  		editMenu_Copy = new JMenuItem("Copy(C)",'C');
  		editMenu_Copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
  		editMenu_Copy.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				editArea.copy();
  			}
  		});
  		editMenu_Paste = new JMenuItem("Paste(P)",'P');
  		editMenu_Paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
  		editMenu_Paste.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				editArea.paste();
  			}
  		});
  		editMenu_Delete = new JMenuItem("Delete(L)",'L');
  		editMenu_Delete.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
  		editMenu_Delete.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				editArea.replaceSelection(null);
  			}
  		});
  		editMenu_Find = new JMenuItem("Find(F)...",'F');
  		editMenu_Find.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK));
  		editMenu_Find.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				search();
  			}
  		});
  		editMenu_GoTo = new JMenuItem("Go(G)...",'G');
  		editMenu_GoTo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, InputEvent.CTRL_MASK));
  		editMenu_GoTo.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				JOptionPane pane = new JOptionPane();
  				String s = pane.showInputDialog(null,"Go to","Please input the line number",JOptionPane.YES_OPTION);
  				if(s!=null){
  					int result = Integer.valueOf(s).intValue();
  					try{
  						int position = editArea.getLineStartOffset(result) - 1;
  						editArea.setCaretPosition(position);
  					}catch(Exception ex){
  						ex.printStackTrace();
  					}
  				}
  			}
  		});
  		editMenu_SelectAll = new JMenuItem("Select All",'A');
  		editMenu_SelectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
  		editMenu_SelectAll.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				editArea.selectAll();
  			}
  		});
  		editMenu_TimeDate = new JMenuItem("Time/Date(D)",'D');
  		editMenu_TimeDate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,0));
  		editMenu_TimeDate.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				int y,m,d,h,mi,s;    
				Calendar cal=Calendar.getInstance();    
				y=cal.get(Calendar.YEAR);
				m=cal.get(Calendar.MONTH);
				d=cal.get(Calendar.DATE);
				h=cal.get(Calendar.HOUR_OF_DAY);
				mi=cal.get(Calendar.MINUTE);
				s=cal.get(Calendar.SECOND);
  				//Date date=new Date();
				//DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				//String time=format.format(date);
  				editArea.insert(y+" year "+m+" mouth "+d+" day "+h+":"+mi+":"+s,editArea.getCaretPosition());
  			}
  		});
  		
  		JMenu formatMenu = new JMenu("Format(O)", true);
  		formatMenu.setMnemonic('O');
  		formatMenu_LineWrap = new JCheckBoxMenuItem("Line Wrap(W)");
  		formatMenu_LineWrap.setMnemonic('W');
  		formatMenu_LineWrap.setState(true);
  		formatMenu_LineWrap.addItemListener(new ItemListener(){
  			public void itemStateChanged(ItemEvent e){
  				if(formatMenu_LineWrap.getState()){
  					editArea.setLineWrap(true);
  				}
  				else{
  					editArea.setLineWrap(false);
  				}
  			}
  		});
  		formatMenu_Font = new JMenuItem("Font(F)...",'F');
  		formatMenu_Font.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				dialogforfont();
  			}
  		});
	
		JMenu viewMenu = new JMenu("View(V)", true);
  		viewMenu.setMnemonic('V');
  		viewMenu_Status = new JCheckBoxMenuItem("Status Bar(S)");
  		viewMenu_Status.setMnemonic('S');
  		viewMenu_Status.setState(false);
  		viewMenu_Status.addItemListener(new ItemListener(){
  			public void itemStateChanged(ItemEvent e){
  				if(viewMenu_Status.getState()){
  					status();
  					fresh();
  					statusLabel.setVisible(true);
  					
  				}
  				else{
  					statusLabel.setVisible(false);
  				}
  			}
  		});
  
  		JMenu helpMenu = new JMenu("Help(H)", true);
  		helpMenu.setMnemonic('H');
  		helpMenu_Help = new JMenuItem("Help(H)",'H');
  		helpMenu_Help.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));
  		
  		helpMenu_Help.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
    			String helpTopicsStr=new String("<center><br>lalalal<br><a href=http:// target=_blank>"+"http://</a><br><br><br>"+"demo</center>");
            
    			JEditorPane editPane=new JEditorPane("text/html",helpTopicsStr);
    			editPane.setEditable(false);
    			try{
                java.net.URI uri = java.net.URI.create("http://www.baidu.com/");  
                java.awt.Desktop dp = java.awt.Desktop.getDesktop() ;    
                if (dp.isSupported(java.awt.Desktop.Action.BROWSE))
                    dp.browse(uri);
           		}catch(Exception c){
            		c.printStackTrace();
            	}
  			}
  		});
  		helpMenu_About = new JMenuItem("About(A)",'A');
  		helpMenu_About.addActionListener(new ActionListener(){
  			public void actionPerformed(ActionEvent e){
  				JOptionPane.showMessageDialog(null,
  				"			demo	\n" + 
  				"			fo		\n" + 
  				"			java	\n",
  				"About",JOptionPane.INFORMATION_MESSAGE);
  			}
  		});
				
		menubar.add(fileMenu);
		fileMenu.add(fileMenu_New);
		fileMenu.add(fileMenu_Open);
		fileMenu.add(fileMenu_Save);
  		fileMenu.add(fileMenu_SaveAs);
  		fileMenu.addSeparator();  
  		fileMenu.add(fileMenu_PageSetup);
  		fileMenu.addSeparator();  
  		fileMenu.add(fileMenu_Exit);
		
		menubar.add(editMenu);
		editMenu.add(editMenu_Undo);
		editMenu.add(editMenu_Redo);
		editMenu.addSeparator();  
  		editMenu.add(editMenu_Cut);
  		editMenu.add(editMenu_Copy);
  		editMenu.add(editMenu_Paste);
  		editMenu.add(editMenu_Delete);
  		editMenu.addSeparator();   
  		editMenu.add(editMenu_Find);
  		editMenu.add(editMenu_GoTo);
  		editMenu.addSeparator();    
  		editMenu.add(editMenu_SelectAll);
  		editMenu.add(editMenu_TimeDate);
  		
  		menubar.add(formatMenu);
  		formatMenu.add(formatMenu_LineWrap);
  		formatMenu.addSeparator(); 
  		formatMenu.add(formatMenu_Font);
  		
  		menubar.add(viewMenu);
  		viewMenu.add(viewMenu_Status);
  		
  		menubar.add(helpMenu);
  		helpMenu.add(helpMenu_Help);
  		helpMenu.addSeparator();
  		helpMenu.add(helpMenu_About);
  		
  		editArea = new JTextArea();
  		JScrollPane scroller = new JScrollPane(editArea);
  		scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		container.add(scroller,BorderLayout.CENTER);
		editArea.setWrapStyleWord(true);
		editArea.setLineWrap(true);
		Font font = new Font("TimesRoman",Font.PLAIN,17);
		editArea.setFont(font);
		editArea.setBackground(Color.white);  
        editArea.setForeground(Color.black);
        editArea.getDocument().addUndoableEditListener(new UndoableEditListener(){
            public void undoableEditHappened(UndoableEditEvent e) {
                undo.addEdit(e.getEdit());
            }  
        });
   
        popupMenu=new JPopupMenu();
  		popupMenu_Undo=new JMenuItem("Undo(U)",'U');
  		popupMenu_Redo=new JMenuItem("Redo(R)",'R');
  		popupMenu_Cut =new JMenuItem("Cut(T)",'T');
  		popupMenu_Copy=new JMenuItem("Copy(C)",'C');
  		popupMenu_Paste=new JMenuItem("Paset(P)",'P');
  		popupMenu_Delete=new JMenuItem("Delete(D)",'D');
  		popupMenu_SelectAll=new JMenuItem("Select all(A)",'A');     
  		
  		popupMenu.add(popupMenu_Undo);
  		popupMenu.add(popupMenu_Redo);
  		popupMenu.addSeparator();
  		popupMenu.add(popupMenu_Cut);
  		popupMenu.add(popupMenu_Copy);  
  		popupMenu.add(popupMenu_Paste); 
  		popupMenu.add(popupMenu_Delete);
 		popupMenu.addSeparator();
 		
 		editArea.addMouseListener(new MouseAdapter(){
 			public void mousePressed(MouseEvent e){
 				int mods = e.getModifiers();
 				if(mods == InputEvent.BUTTON3_MASK)
 					popupMenu.show(e.getComponent(),e.getX(),e.getY());
 			}
 			
 			//兩個方法都可以的
 			/*public void mousePressed(MouseEvent e){
 				triggerEvent(e);
 			}	
 			
 			public void triggerEvent(MouseEvent e){
				if(e.isPopupTrigger())
					popupMenu.show(e.getComponent(),e.getX(),e.getY());
			}*/				
 		});
		try{
			String lookAndFeel = UIManager.getSystemLookAndFeelClassName();
			UIManager.setLookAndFeel(lookAndFeel);
			SwingUtilities.updateComponentTreeUI(this);
		}catch(Exception e){
			e.printStackTrace();
		}

		this.setJMenuBar(menubar);
		this.setSize(1050,650);
		this.setLocation(100,50);
		this.setTitle("XW");
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setIconImage(image);
		this.setVisible(true);
	}
	
	public void search(){
		final JDialog searchDialog = new JDialog();
		
		Container con = searchDialog.getContentPane();
		con.setLayout(new FlowLayout(FlowLayout.LEFT));
		
		JLabel searchlabel = new JLabel("Search:");
		JLabel replacelabel = new JLabel("Replace by");
		final JTextField searchtext = new JTextField(15);
		final JTextField replacetext = new JTextField(15);
		final JCheckBox matchcase = new JCheckBox("Seperated by big characters");
		ButtonGroup bgroup = new ButtonGroup();
		final JRadioButton up = new JRadioButton("Up");
		final JRadioButton down = new JRadioButton("Down");
		down.setSelected(true);
		bgroup.add(up);
		bgroup.add(down);
		JButton next = new JButton("Find Next");
		JButton replace = new JButton("Replace");
		final JButton replaceall = new JButton("Replace All");
		
		next.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(searchtext.getText().equals("")){
					JOptionPane.showMessageDialog(searchDialog,"Search Field can't be empty'!","Warning",JOptionPane.WARNING_MESSAGE);
				}
				else{
					String a;
					String b;
					if(matchcase.isSelected()){
						a = editArea.getText();
						b = searchtext.getText();
					}
					else{
						a = editArea.getText().toLowerCase();
						b = searchtext.getText().toLowerCase();
					}
					if(down.isSelected()){
						int l = a.indexOf(b,l0);
						if(l > 0){
							l0 = l + 1;
							editArea.select(l,l + searchtext.getText().length());
  						}
  						else{
  							JOptionPane.showMessageDialog(searchDialog,"No next","Warning",JOptionPane.WARNING_MESSAGE);
  						}
					}
					if(up.isSelected()){
						
					}
				}
    		}
		});
		
		replace.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if(replacetext.getText()== null && editArea.getSelectedText()!= null){
					System.out.println("kong succeed!");
					editArea.replaceSelection("");
				}
				else if(replacetext.getText()!= null && editArea.getSelectedText()!= null){
					System.out.println("fei kong succeed!");
					editArea.replaceSelection(replacetext.getText());
				}
			}
		});
		
		replaceall.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				editArea.setCaretPosition(0);
				int a = 0;
				int b = 0;
				int replaceCount = 0;
				if(searchtext.getText()==null){
					JOptionPane.showMessageDialog(searchDialog,"Please Input the Search String!","Warning",JOptionPane.WARNING_MESSAGE);
					searchtext.requestFocus(true);
					return ;
				}
				while(a > -1){
					int startpos = editArea.getCaretPosition();
					String sa,sb;
					String s1 = editArea.getText();
					String s2 = s1.toLowerCase();
					String s3 = searchtext.getText();
					String s4 = s3.toLowerCase();
					
					if(matchcase.isSelected()) {
      					sa = s1;
      					sb = s3;
     				}
     				else{
      					sa = s2;
      					sb = s4;
     				}
					if(up.isSelected()){
						if(editArea.getSelectedText() == null){
							a = sa.lastIndexOf(sb,startpos - 1);
						}
						else{
							a = sa.lastIndexOf(sb,startpos - searchtext.getText().length() - 1);
						}
					}
					else if(down.isSelected()){
						if(editArea.getSelectedText() == null){
							a = sa.indexOf(sb,startpos);
						}
						else{
							a = sa.indexOf(sb,startpos - searchtext.getText().length() + 1);
						}
					}
				}
			}
		});
		
		JPanel bottomPanel=new JPanel();
  		JPanel centerPanel=new JPanel();
  		JPanel topPanel=new JPanel();
 
  		JPanel direction=new JPanel();
  		direction.setBorder(BorderFactory.createTitledBorder("direction:"));
  		direction.add(up);
  		direction.add(down);
  
  		JPanel replacePanel=new JPanel();
  		replacePanel.setLayout(new GridLayout(2,1));
  		replacePanel.add(replace);
  		replacePanel.add(replaceall);
  		topPanel.add(searchlabel);
  		topPanel.add(searchtext);
  		topPanel.add(next);
  		centerPanel.add(replacelabel);
  		centerPanel.add(replacetext);
  		centerPanel.add(replacePanel);
  		bottomPanel.add(matchcase);
  		bottomPanel.add(direction);
  		//bottomPanel.add(cancelbutton);
  		con.add(topPanel);
  		con.add(centerPanel);
  		con.add(bottomPanel);
		
		searchDialog.setTitle("Search");
		searchDialog.setSize(400,350);
		searchDialog.setLocation(450,200);
		searchDialog.setResizable(false);
		searchDialog.setVisible(true);
	}
	
	public void dialogforfont(){
		final JDialog fontDialog = new JDialog();
		
		final JLabel example = new JLabel("demo for font");
		example.setHorizontalAlignment(SwingConstants.CENTER);
		example.setPreferredSize(new Dimension(200,30));
		
		fontDialog.setTitle("Font Setup");
		Container con=fontDialog.getContentPane();
   		con.setLayout(new FlowLayout(FlowLayout.LEFT));
   
   		final Font currentFont=editArea.getFont();
   		newfont = currentFont;

		JLabel font = new JLabel("Font:");
		font.setPreferredSize(new Dimension(100,20));
		JLabel style = new JLabel("style");
		style.setPreferredSize(new Dimension(100,20));
		JLabel size = new JLabel("size");
		size.setPreferredSize(new Dimension(100,20));

		final JTextField nfont = new JTextField(10);
		nfont.setPreferredSize(new Dimension(30,30));
		final JTextField nstyle = new JTextField(8);
		nstyle.setPreferredSize(new Dimension(30,30));
		final JTextField nsize = new JTextField(3);
		nsize.setPreferredSize(new Dimension(30,30));
		nfont.setText(currentFont.getFontName());
		nfont.selectAll();
		if(currentFont.getStyle()==Font.PLAIN)
    		nstyle.setText("chang gui");
   		else if(currentFont.getStyle()==Font.BOLD)
    		nstyle.setText("cu ti");
   		else if(currentFont.getStyle()==Font.ITALIC)
    		nstyle.setText("xie ti");
   		else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
    		nstyle.setText("cu xie ti");
		nstyle.requestFocus();
		nstyle.selectAll();
		nsize.setText(currentFont.getSize()+"");
		nsize.requestFocus();
		nsize.selectAll();

		GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
		final String fontname[] = ge.getAvailableFontFamilyNames();
		int defaultFontIndex = 0;
		for(int i = 0;i < fontname.length;i ++){
			if(fontname[i].equals(currentFont.getFontName())){
				defaultFontIndex = i;
				break;
			}
		}
		final JList listfont = new JList(fontname);
		listfont.setSelectedIndex(defaultFontIndex);
		listfont.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		listfont.setVisibleRowCount(7);
   		listfont.setFixedCellWidth(82);
   		listfont.setFixedCellHeight(20);
   		listfont.addListSelectionListener(new ListSelectionListener(){
   			public void valueChanged(ListSelectionEvent event){
   				nfont.setText(fontname[listfont.getSelectedIndex()]);
   				nfont.requestFocus();
   				nfont.selectAll();
   				Font newFont = new Font(nfont.getText(),newfont.getStyle(),newfont.getSize());
   				example.setFont(newFont);
   				newfont = newFont;
   			}
   		});
   		
   		final String fontstyle[] = {"chang gui","cu ti","xie ti","cu xie ti"};
		final JList liststyle = new JList(fontstyle);
		liststyle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		if(currentFont.getStyle()==Font.PLAIN)
    		liststyle.setSelectedIndex(0);
   		else if(currentFont.getStyle()==Font.BOLD)
    		liststyle.setSelectedIndex(1);
   		else if(currentFont.getStyle()==Font.ITALIC)
    		liststyle.setSelectedIndex(2);
   		else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC))
    		liststyle.setSelectedIndex(3);
		
		liststyle.setVisibleRowCount(7);
		liststyle.setVisibleRowCount(7);
   		liststyle.setFixedCellWidth(99);
   		liststyle.setFixedCellHeight(20);
   		liststyle.addListSelectionListener(new ListSelectionListener(){
   			public void valueChanged(ListSelectionEvent e){
   				nstyle.setText(fontstyle[liststyle.getSelectedIndex()]);
   				nstyle.requestFocus();
   				nstyle.selectAll();
   				int newstyle = 0;
   				if(nstyle.getText().equals("chang gui")){
   					newstyle = Font.PLAIN;
   				}
   				else if(nstyle.getText().equals("cu ti")){
   					newstyle = Font.BOLD;
   				}
   				else if(nstyle.getText().equals("xie ti")){
   					newstyle = Font.ITALIC;
   				}
   				else{
   					newstyle = Font.BOLD + Font.ITALIC;
   				}
   				Font newFont = new Font(nfont.getText(),newstyle,newfont.getSize());
   				example.setFont(newFont);
   				newfont = newFont;
   			}
   		});
   		
   		final String fontsize[] = {"11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"};
   		final JList listsize = new JList(fontsize);
   		int defaultFontSizeIndex = 0;
   		for(int i = 0;i < fontsize.length;i ++){
   			if(fontsize[i].equals(currentFont.getSize() + "")){
   				defaultFontSizeIndex = i;
   				break;
   			}
   		}
   		listsize.setSelectedIndex(defaultFontSizeIndex);
   		listsize.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
	   	listsize.setVisibleRowCount(7);
	   	listsize.setFixedCellWidth(39);
	   	listsize.setFixedCellHeight(20);
		listsize.addListSelectionListener(new ListSelectionListener(){
			public void valueChanged(ListSelectionEvent e){
				nsize.setText(fontsize[listsize.getSelectedIndex()]);
				nsize.requestFocus();
				nsize.selectAll();
				Font newFont = new Font(nfont.getText(),newfont.getStyle(),Integer.valueOf(nsize.getText()));
   				example.setFont(newFont);
   				newfont = newFont;
			}
		});
		
		JButton fontokbutton = new JButton("OK");
		fontokbutton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				editArea.setFont(newfont);
				fontDialog.dispose();
			}
		});
		
		JButton fontcancelbutton = new JButton("Cancel");
		fontcancelbutton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				fontDialog.dispose();	
			}
		});
		
		JPanel samplePanel=new JPanel();
   		samplePanel.setBorder(BorderFactory.createTitledBorder("示例"));
   		samplePanel.add(example);
   		
   		con.add(font);
   		con.add(style);
   		con.add(size);
   		con.add(nfont);
   		con.add(nstyle);
   		con.add(nsize);
   		con.add(new JScrollPane(listfont));
   		con.add(new JScrollPane(liststyle));
   		con.add(new JScrollPane(listsize));
   		con.add(samplePanel);
   		con.add(fontokbutton);
   		con.add(fontcancelbutton);
   		
   		fontDialog.setSize(350,340);
   		fontDialog.setLocation(200,200);
   		fontDialog.setResizable(false);
   		fontDialog.setVisible(true);
   }
   
   public void fresh(){
   		this.validate();
   }
	
	public void status(){
		editArea.addCaretListener(new CaretListener(){
  			public void caretUpdate(CaretEvent e){ 
            	try{ 
            	    int pos = editArea.getCaretPosition(); 
              		int lineOfC = editArea.getLineOfOffset(pos) + 1; 
    	    	    int col = pos - editArea.getLineStartOffset(lineOfC - 1) + 1;
               	    statusLabel.setText("Current Location is " + lineOfC + " row, " + col + " line");
                }catch(Exception ex) 
                {
                	statusLabel.setText("No Location");
                } 
            } 
        });
  		container.add(statusLabel,BorderLayout.SOUTH);
	}
	
	public void resetTitle(String s){
		String str = s.substring(0,s.length()-5);
		this.setTitle(str + " - XW");
	}

	public void dialogShow(){
		JDialog dialog = new JDialog(this,"Page Setup");
		dialog.setSize(400,300);
		dialog.setLocationRelativeTo(this);
		dialog.setVisible(true);
	}
	
	public static void main(String[] args){
		Editor example = new Editor();
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章