tag:blogger.com,1999:blog-18646242.post-1131118747979401572005-11-04T07:32:00.000-08:002005-11-04T07:39:07.993-08:00Java Hindi office suite: InternetExplorerContinuing my last post, this contains the code of a Java InternetExplorer replacement. This is a simple web browser with hindi menus and dialogs. Has no support for frames, javascript or applets. Save is not yet correctly imlemented(saves only the html part,not the embedded pictures or other resources). That said here is your code for IExplorer.java<br /> <br />//IExplorer.java<br />/*<br /> * Created on Dec 16, 2004<br /> */<br />package name.shabda.office;<br /><br />import java.awt.BorderLayout;<br />import java.awt.Dimension;<br />import java.awt.GridLayout;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;<br />import java.awt.event.WindowAdapter;<br />import java.awt.event.WindowEvent;<br />import java.io.File;<br />import java.io.FileOutputStream;<br />import java.io.FileReader;<br />import java.io.IOException;<br />import java.net.MalformedURLException;<br />import java.net.URL;<br />import java.util.Hashtable;<br />import java.util.Stack;<br /><br />import javax.swing.Action;<br />import javax.swing.ImageIcon;<br />import javax.swing.JButton;<br />import javax.swing.JEditorPane;<br />import javax.swing.JFileChooser;<br />import javax.swing.JFrame;<br />import javax.swing.JLabel;<br />import javax.swing.JMenu;<br />import javax.swing.JMenuBar;<br />import javax.swing.JMenuItem;<br />import javax.swing.JPanel;<br />import javax.swing.JScrollPane;<br />import javax.swing.JTextField;<br />import javax.swing.JToolBar;<br />import javax.swing.event.HyperlinkEvent;<br />import javax.swing.event.HyperlinkListener;<br />import javax.swing.filechooser.FileFilter;<br />import javax.swing.text.DefaultEditorKit;<br />import javax.swing.text.JTextComponent;<br />import javax.swing.text.html.HTMLEditorKit;<br /><br />/**<br /> * @author dicky<br /> */<br />public class IExplorer extends JFrame {<br /> JEditorPane theView;//the editor where the page is displayed<br /> JTextField add;//address bar<br /> Stack backPages;//stack which contains list of pages to which you can go back<br /> Stack forwardPages;//list of pages to which you can forward<br /> HTMLEditorKit editor;//editor for saving and opening<br /> private JMenuItem back;//the back menu item<br /> private JMenuItem forward;//the forward menu item<br /> private JButton backButton;<br /> private JButton forwardButton;<br /> <br /> Hashtable actions;//stores the actions<br /> <br /> /**<br /> * <br /> */<br /> public IExplorer() {<br /> editor=new HTMLEditorKit();<br /> getContentPane().setLayout(new BorderLayout());<br /> theView=getEditor();<br /> createActionTable(theView);//create action table from where we can add the actions to menus<br /> JScrollPane pane=new JScrollPane(theView);<br /> getContentPane().add(pane,BorderLayout.CENTER);<br /> getContentPane().add(getNonEditor(),BorderLayout.NORTH);<br /> addHtmlListener();<br /> setJMenuBar(getMenu()); <br /> backPages=new Stack();<br /> forwardPages=new Stack();<br /> try {<br /> setPage(new URL("http://www.aksharmala.com/")); //$NON-NLS-1$<br /> } catch (MalformedURLException e) {<br /> e.printStackTrace();<br /> }<br /> addWindowListener(new WindowAdapter() {<br /> public void windowClosing(WindowEvent e) {<br /> System.exit(0); <br /> } <br /> <br /> });<br /> }<br /> /**<br /> * This method registers a html listener on the document.<br /> * */<br /> public void addHtmlListener(){<br /> theView.addHyperlinkListener(new HyperlinkListener() {<br /><br /> public void hyperlinkUpdate(HyperlinkEvent e) {<br /> if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {<br /> URL url;<br /> try {<br /> url = new URL(add.getText());//the current page<br /> backPages.push(url);//add current page to the stack so you can go back there<br /> url=e.getURL();<br /> forwardPages.clear();<br /> setPage(url);<br /> } catch (MalformedURLException e1) {<br /> e1.printStackTrace();<br /> }<br /> }<br /> }});<br /> }<br /> public void setPage(URL s) {<br /> try {<br /> theView.setPage(s);<br /> add.setText(s.toString());<br /> updateMenus();<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> } <br /> public JMenuBar getMenu() {<br /> JMenuBar menu=new JMenuBar();<br /> JMenu file = new JMenu(Messages.getString("NoteTab.4")); //$NON-NLS-1$<br /> JMenuItem open = new JMenuItem(Messages.getString("NoteTab.7")); //$NON-NLS-1$<br /> JMenuItem save = new JMenuItem(Messages.getString("NoteTab.6")); //$NON-NLS-1$<br /> JMenuItem print = new JMenuItem(Messages.getString("NoteTab.8")); //$NON-NLS-1$<br /> open.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> open();<br /> <br /> }});<br /> save.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> saveAs();<br /> <br /> }});<br /> file.add(open);<br /> file.add(save);<br /> file.add(print);<br /> menu.add(file);<br /> <br /> JMenu edit=new JMenu(Messages.getString("NoteTab.19")); //$NON-NLS-1$<br /> JMenuItem cut = new JMenuItem(Messages.getString("NoteTab.20")); //$NON-NLS-1$<br /> cut.addActionListener(getActionByName(DefaultEditorKit.cutAction));<br /> JMenuItem copy = new JMenuItem(Messages.getString("NoteTab.21")); //$NON-NLS-1$<br /> copy.addActionListener(getActionByName(DefaultEditorKit.copyAction));<br /> JMenuItem paste = new JMenuItem(Messages.getString("NoteTab.22")); //$NON-NLS-1$<br /> paste.addActionListener(getActionByName(DefaultEditorKit.pasteAction));<br /> JMenuItem selectAll = new JMenuItem(Messages.getString("NoteTab.23")); //$NON-NLS-1$<br /> selectAll<br /> .addActionListener(getActionByName(DefaultEditorKit.selectAllAction));<br /> edit.add(cut);<br /> edit.add(copy);<br /> edit.add(paste);<br /> edit.add(selectAll);<br /> menu.add(edit);<br /> JMenu navigate=new JMenu(Messages.getString("IE.2")); //$NON-NLS-1$<br /> back = new JMenuItem(Messages.getString("IE.3")); //$NON-NLS-1$<br /> back.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> URL url;<br /> try {<br /> url=new URL(add.getText());//current page<br /> forwardPages.push(url);<br /> url=(URL) backPages.pop();<br /> setPage(url);<br /> } catch (MalformedURLException e1) {<br /> e1.printStackTrace();<br /> }<br /> }});<br /> forward = new JMenuItem(Messages.getString("IE.4")); //$NON-NLS-1$<br /> forward.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> URL url;<br /> try {<br /> url=new URL(add.getText());//current page<br /> backPages.push(url);<br /> url=(URL) forwardPages.pop();<br /> setPage(url);<br /> } catch (MalformedURLException e1) {<br /> e1.printStackTrace();<br /> }<br /> }});<br /> JMenuItem home=new JMenuItem(Messages.getString("IE.5")); //$NON-NLS-1$<br /> navigate.add(back);<br /> navigate.add(forward);<br /> navigate.add(home);<br /> menu.add(navigate);<br /> JMenu help=new JMenu(Messages.getString("NoteTab.44")); //$NON-NLS-1$<br /> menu.add(help);<br /> return menu;<br /> <br /> }<br /> public JPanel getNonEditor() {<br /> JPanel p=new JPanel();<br /> p.setLayout(new GridLayout(2,1));<br /> p.add(getToolBar2());<br /> p.add(getToolBar());<br /> return p;<br /> }<br /> public JToolBar getToolBar2() {<br /> JToolBar tools=new JToolBar();<br /> backButton=new JButton();<br /> forwardButton=new JButton();<br /> ImageIcon icon=createImageIcon("../images/back.gif", null);<br /> backButton.setIcon(icon);<br /> icon=createImageIcon("../images/forward.gif", null);<br /> forwardButton.setIcon(icon);<br /> JButton open=new JButton();<br /> icon=createImageIcon("../images/open.gif", null);<br /> open.setIcon(icon);<br /> JButton save=new JButton();<br /> icon=createImageIcon("../images/save.gif", null);<br /> save.setIcon(icon);<br /> JButton cut=new JButton();<br /> icon=createImageIcon("../images/cut.gif", null);<br /> cut.setIcon(icon);<br /> JButton copy=new JButton();<br /> icon=createImageIcon("../images/copy.gif", null);<br /> copy.setIcon(icon);<br /> JButton paste=new JButton();<br /> icon=createImageIcon("../images/paste.gif", null);<br /> paste.setIcon(icon);<br /> open.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> open();<br /> <br /> }});<br /> save.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> saveAs();<br /> <br /> }});<br /> cut.addActionListener(getActionByName(DefaultEditorKit.cutAction));<br /> copy.addActionListener(getActionByName(DefaultEditorKit.copyAction));<br /> paste.addActionListener(getActionByName(DefaultEditorKit.pasteAction));<br /> backButton.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> URL url;<br /> try {<br /> url=new URL(add.getText());//current page<br /> forwardPages.push(url);<br /> url=(URL) backPages.pop();<br /> setPage(url);<br /> } catch (MalformedURLException e1) {<br /> e1.printStackTrace();<br /> }<br /> }});<br /> forwardButton.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> URL url;<br /> try {<br /> url=new URL(add.getText());//current page<br /> backPages.push(url);<br /> url=(URL) forwardPages.pop();<br /> setPage(url);<br /> } catch (MalformedURLException e1) {<br /> e1.printStackTrace();<br /> }<br /> }});<br /> tools.add(open);<br /> tools.add(save);<br /> tools.addSeparator();<br /> tools.add(cut);<br /> tools.add(copy);<br /> tools.add(paste);<br /> tools.addSeparator();<br /> tools.add(backButton);<br /> tools.add(forwardButton);<br /> return tools;<br /> }<br /> public JToolBar getToolBar() {<br /> <br /> JToolBar tools=new JToolBar();<br /> JLabel addL=new JLabel("address");<br /> tools.add(addL);<br /> tools.addSeparator();<br /> add=new JTextField();<br /> add.setPreferredSize(new Dimension(500,20));<br /> add.addActionListener(new ActionListener() {<br /><br /> public void actionPerformed(ActionEvent e) {<br /> JTextField t= (JTextField) e.getSource();<br /> String s=t.getText();<br /> <br /> try {<br /> setPage(new URL(s));<br /> } catch (MalformedURLException e1) {<br /> e1.printStackTrace();<br /> }<br /> <br /> }});<br /> tools.add(add);<br /> return tools;<br /> }<br /> /**<br /> * updates the forward and back buttons depending on whether or not they are empty<br /> * */<br /> public void updateMenus() {<br /> if(backPages.isEmpty()) {<br /> back.setEnabled(false); <br /> backButton.setEnabled(false);<br /> }<br /> else {back.setEnabled(true);<br /> backButton.setEnabled(true);<br /> }<br /> if(forwardPages.isEmpty()) {<br /> forward.setEnabled(false);<br /> forwardButton.setEnabled(false);<br /> }<br /> else {forward.setEnabled(true);<br /> forwardButton.setEnabled(true);<br /> }<br /> }<br /> /**<br /> * returns a unditable JEditoPane<br /> * */<br /> public JEditorPane getEditor() {<br /> JEditorPane ed=null;<br /> ed=new JEditorPane();<br /> ed.setEditable(false);<br /> ed.setPreferredSize(new Dimension(500,300));<br /> return ed;<br /> }<br /> public void open() {<br /> JFileChooser fc = new JFileChooser();<br /> fc.addChoosableFileFilter(new FileFilter() {<br /><br /> public boolean accept(File f) {<br /> if (f.isDirectory()) {<br /> return true;<br /> }<br /><br /> String extension = getExtension(f);<br /> if (extension != null) {<br /> if (extension.equals("html")) {<br /> return true;<br /> } else {<br /> return false;<br /> }<br /> }<br /><br /> return false;<br /> }<br /><br /> public String getDescription() {<br /> return "HTML Files"; <br /> }});<br /> int returnVal = fc.showOpenDialog(IExplorer.this);//this is tricky.I dont<br /> // understand it but..<br /> if (returnVal == JFileChooser.APPROVE_OPTION) {<br /> theView.setText(Messages.getString("NoteTab.47"));//need to show a new file.So clear the screen. //$NON-NLS-1$<br /> File file = fc.getSelectedFile();<br /> try {<br /> FileReader in = new FileReader(file);<br /> editor.read(in, theView.getDocument(), 0);<br /> } catch (Exception ee) {<br /> }<br /> }<br /> }<br /> public void saveAs() {<br /> JFileChooser fc = new JFileChooser();<br /> int returnVal = fc.showSaveDialog(IExplorer.this);//this is tricky.I dont<br /> // understand it but..<br /> if (returnVal == JFileChooser.APPROVE_OPTION) {<br /> File file = fc.getSelectedFile();<br /> try {<br /> FileOutputStream out = new FileOutputStream(file);<br /> editor.write(out, theView.getDocument(), 0, theView.getDocument().getLength());<br /> } catch (Exception ee) {<br /> System.out.println(Messages.getString("NoteTab.45")); //$NON-NLS-1$<br /> ee.printStackTrace();<br /> }<br /><br /> }<br /> }<br /> private void createActionTable(JTextComponent textComponent) {<br /> actions = new Hashtable();<br /> Action[] actionsArray = textComponent.getActions();<br /> for (int i = 0; i < actionsArray.length; i++) {<br /> Action a = actionsArray[i];<br /> actions.put(a.getValue(Action.NAME), a);<br /> }<br /> }<br /><br /> private Action getActionByName(String name) {<br /> return (Action) (actions.get(name));<br /> }<br /> /**<br /> * Get the file extension from that file<br /> * */<br /> public static String getExtension(File f) {<br /> String ext = null;<br /> String s = f.getName();<br /> int i = s.lastIndexOf('.');<br /><br /> if (i > 0 && i < s.length() - 1) {<br /> ext = s.substring(i+1).toLowerCase();<br /> }<br /> return ext;<br /> }<br /> protected static ImageIcon createImageIcon(String path,<br /> String description) {<br /> java.net.URL imgURL = NoteTab.class.getResource(path);<br /> if (imgURL != null) {<br /> return new ImageIcon(imgURL, description);<br /> } else {<br /> System.err.println("Couldn't find file: " + path);<br /> return null;<br /> }<br /> }<br /> public static void main(String[] args) {<br /> IExplorer app=new IExplorer();<br /> app.pack();<br /> app.show();<br /> }<br />}<br /><br />And again we need the files Messages.java and Messages.properties to display our externalised strings. Here are the codes, same as for NoteTab.java<br /><br />//Messages.java<br />/*<br /> * Created on Dec 16, 2004<br /> */<br />package name.shabda.office;<br /><br />import java.util.MissingResourceException;<br />import java.util.ResourceBundle;<br /><br />/**<br /> * @author dicky<br /> */<br />public class Messages {<br /> private static final String BUNDLE_NAME = "name.shabda.office.messages";//$NON-NLS-1$<br /><br /> private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle<br /> .getBundle(BUNDLE_NAME);<br /><br /> private Messages() {<br /> }<br /><br /> public static String getString(String key) {<br /> // TODO Auto-generated method stub<br /> try {<br /> return RESOURCE_BUNDLE.getString(key);<br /> } catch (MissingResourceException e) {<br /> return '!' + key + '!';<br /> }<br /> }<br />}<br />And the hindi localised Messages.properties:<br />NoteTab.0=\u0939\u093e\u0901<br />NoteTab.1=\u0928\u0939\u0940\u0902<br />NoteTab.2=\u0906\u092a\u0915\u0940 \u090f\u0915 \u095e\u093e\u0907\u0932 \u091c\u092e\u093e \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0915\u094d\u092f\u093e \u0909\u0938\u0947 \u091c\u092e\u093e \u0915\u0930 \u0926\u0942\u0901 ?\n<br />NoteTab.3=File not saved!<br />NoteTab.4=\u095e\u093e\u0907\u0932 <br />NoteTab.5=\u0928\u092f\u093e<br />NoteTab.6=\u091c\u092e\u093e \u0915\u0930\u094b<br />NoteTab.7=\u0916\u094b\u0932\u094b<br />NoteTab.8=\u091b\u093e\u092a\u094b<br />NoteTab.9=\u0939\u093e\u0901<br />NoteTab.10=\u0928\u0939\u0940\u0902<br />NoteTab.11=Cancel<br />NoteTab.12=\u0906\u092a\u0915\u0940 \u090f\u0915 \u095e\u093e\u0907\u0932 \u091c\u092e\u093e \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0915\u094d\u092f\u093e \u0909\u0938\u0947 \u091c\u092e\u093e \u0915\u0930 \u0926\u0942\u0901 ?\n <br />NoteTab.13=File not saved!<br />NoteTab.14=\u0939\u093e\u0901<br />NoteTab.15=\u0928\u0939\u0940\u0902<br />NoteTab.16=Cancel<br />NoteTab.17=\u0906\u092a\u0915\u0940 \u090f\u0915 \u095e\u093e\u0907\u0932 \u091c\u092e\u093e \u0928\u0939\u0940\u0902 \u0939\u0948\u0964 \u0915\u094d\u092f\u093e \u0909\u0938\u0947 \u091c\u092e\u093e \u0915\u0930 \u0926\u0942\u0901 ?\n <br />NoteTab.18=File not saved!<br />NoteTab.19=\u090f\u0921\u093f\u091f<br />NoteTab.20=\u0915\u093e\u091f\u094b<br />NoteTab.21=\u0928\u0915\u0932 \u0915\u0930\u094b<br />NoteTab.22=\u091a\u093f\u092a\u0915\u093e\u0913<br />NoteTab.23=\u0938\u092c\u0915\u094b \u091a\u0941\u0928\u094b<br />NoteTab.24=\u0935\u093e\u092a\u0938 \u0915\u0930\u094b<br />NoteTab.25=\u095e\u093f\u0930 \u0938\u0947 \u0915\u0930\u094b<br />NoteTab.26=\u095e\u094b\u0930\u094d\u092e\u0948\u091f<br />NoteTab.27=\u0932\u093e\u0932 <br />NoteTab.28=\u0915\u093e\u0932\u093e<br />NoteTab.29=\u0928\u0940\u0932\u093e<br />NoteTab.30=\u0906\u0915\u093e\u0930<br />NoteTab.31=\u092c\u0921\u093e<br />NoteTab.32=\u092e\u0927\u094d\u092f\u092e<br />NoteTab.33=\u091b\u094b\u091f\u093e<br />NoteTab.34=\u0938\u094d\u091f\u093e\u0907\u0932<br />NoteTab.35=\u092e\u094b\u091f\u093e<br />NoteTab.36=\u0928\u0940\u091a\u0947 \u0932\u093e\u0907\u0928<br />NoteTab.37=\u0924\u093f\u0930\u091b\u093e<br />NoteTab.38=Red<br />NoteTab.39=Black<br />NoteTab.40=Blue<br />NoteTab.41=<br />NoteTab.42=<br />NoteTab.43=<br />NoteTab.44=\u092e\u0926\u0926<br />NoteTab.45=exeption\!<br />NoteTab.46=exeption\!<br />NoteTab.47=<br />NoteTab.48=<br />NoteTab.49=Undo<br />NoteTab.50=Unable to undo: <br />NoteTab.51=Redo<br />NoteTab.52=Unable to redo: <br />NoteTab.53=\u092f\u0939\u093e\u0901 \u091c\u092e\u093e \u0915\u0930\u094b<br />NoteTab.54=paste.gif<br />IE.2=\u0918\u0942\u092e\u094b <br />IE.3=\u0935\u093e\u092a\u0938 \u091c\u093e\u0913<br />IE.4=\u0906\u0917\u0947 \u091c\u093e\u0913 <br />IE.5=\u0918\u0930 \u091c\u093e\u0913<br />PaintIt.12=About<br />PaintIt.14=\u092c\u0929\u094d\u0926<br />PaintIt.16=\u0930\u0929\u094d\u0917<br />PaintIt.17=\u0914\u091c\u093e\u0930<br />PaintIt.18=\u092f\u0902\u0924\u094d\u0930<br />PaintIt.19=\u092f\u0902\u0924\u094d\u0930<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18646242-113111874797940157?l=bytecodes.blogspot.com'/></div>shabdahttp://www.blogger.com/profile/07961528262493927188noreply@blogger.com1