Malayalam Keyboard For PC ; Windows, Linux and Mac

      Malayalam keyboard for PC / Desktop is an On-screen Malayalam keyboard that built using java programming language and will work on Windows, Linux and Mac operating systems.
Malayalam keyboard for pc screenshot of main window
Malayalam Keyboard for PC
     In the Unicode character representation Malayalam characters are available in between 0D00–0D7F hexadecimal values. In this software you can find all the Malayalam characters as buttons in the application. Clicking on the button will display corresponding character on the screen.
  Normally the Malayalam characters like ‘മ്മ’ is written using + + and ‘ക്ക‘’using + + . Ii this application, I have added a shortcut to this via Mouse Right Click. For example, the normal left click on the will give itself and right click on the will give മ്മ. This is applicable for all characters.
   The ‘BACK’ button will give the normal backspace effect and ‘SPACE’ will do the normal space. ‘SAVE’ can be used to copy the contents in textbox to memory/clipboard which then can be pasted to other applications.
Malayalam Unicode table
 

Malayalam Unicode Character Allocation
Download Malayalam keyboard for PC
 
Source Code:-
 package malayalamkeyboard; 
 import java.awt.AWTException; 
 import java.awt.Button; 
 import java.awt.Font; 
 import java.awt.FontFormatException; 
 import java.awt.GraphicsEnvironment; 
 import java.awt.Robot; 
 import java.awt.Toolkit; 
 import java.awt.datatransfer.Clipboard; 
 import java.awt.datatransfer.StringSelection; 
 import java.awt.event.ActionEvent; 
 import java.awt.event.ActionListener; 
 import java.awt.event.KeyEvent; 
 import java.awt.event.MouseAdapter; 
 import java.io.File; 
 import java.io.IOException; 
 import java.util.ArrayList; 
 import java.util.logging.Level; 
 import java.util.logging.Logger; 
 import javax.swing.JButton; 
 import javax.swing.JOptionPane; 
 public class keyboard extends javax.swing.JFrame { 
   ArrayList extrachars; 
   ArrayList charStrings; 
   ArrayList removable; 
   String charSeq = “”; 
   int ctrx = 0; 
   Font customFont = null, customFontDisplay = null; 
   public keyboard() { 
     initComponents(); 
     loadExtraChars(); 
     try { 
       //create the font to use. Specify the size! 
       customFont = Font.createFont(Font.TRUETYPE_FONT, new File(“lib/font.ttf”)).deriveFont(25f); 
       customFontDisplay = Font.createFont(Font.TRUETYPE_FONT, new File(“lib/font.ttf”)).deriveFont(30f); 
       GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
       //register the font 
       ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File(“lib/font.ttf”))); 
     } catch (IOException e) { 
       e.printStackTrace(); 
     } catch (FontFormatException e) { 
       e.printStackTrace(); 
     } 
     display.setFont(customFontDisplay); 
     for (Object extrachar : extrachars) { 
       char a = (char) extrachar; 
       JButton btn = new JButton(a + “”); 
       btn.setFont(display.getFont().deriveFont(display.getFont().getSize() + 5f)); 
 //      btn.setFont(new java.awt.Font(“font”, 0, 34)); 
       btn.setFont(customFont); 
       btn.setActionCommand(ctrx + “”); 
       btn.addActionListener(new ActionListener() { 
         @Override 
         public void actionPerformed(ActionEvent e) { 
           display.setText(display.getText() + a); 
           char[] chars = display.getText().toCharArray(); 
         } 
       }); 
       btn.addMouseListener(new MouseAdapter() { 
         public void mouseClicked(java.awt.event.MouseEvent evt) { 
           if (evt.getButton() == 3) { 
             char base = ‘u0d4d’; 
             display.setText(display.getText() + a + base + a); 
           } 
         } 
       }); 
       cntr.add(btn); 
       ctrx++; 
     } 
     addExtraButttons(); 
     this.revalidate(); 
     this.repaint(); 
     this.setLocationRelativeTo(null); 
     this.pack(); 
   } 
   void loadExtraChars() { 
     removable = new ArrayList<String>(); 
     removable.add(“d11”); 
     removable.add(“d0d”); 
     removable.add(“d04”); 
     removable.add(“d3b”); 
     removable.add(“d3c”); 
     removable.add(“d45”); 
     removable.add(“d49”); 
     removable.add(“d4f”); 
     removable.add(“d50”); 
     removable.add(“d51”); 
     removable.add(“d52”); 
     removable.add(“d53”); 
     removable.add(“d54”); 
     removable.add(“d55”); 
     removable.add(“d56”); 
     removable.add(“d58”); 
     removable.add(“d59”); 
     removable.add(“d5a”); 
     removable.add(“d5b”); 
     removable.add(“d5c”); 
     removable.add(“d5d”); 
     removable.add(“d5e”); 
     removable.add(“d5f”); 
     removable.add(“d64”); 
     removable.add(“d65”); 
     removable.add(“d76”); 
     removable.add(“d77”); 
     removable.add(“d78”); 
     removable.add(“d29”); 
     removable.add(“d4e”); 
     removable.add(“d3a”); 
     removable.add(“d70”); 
     removable.add(“d71”); 
     removable.add(“d72”); 
     removable.add(“d73”); 
     removable.add(“d74”); 
     removable.add(“d75”); 
     removable.add(“d79”); 
     removable.add(“d3d”); 
     removable.add(“d44”); 
     removable.add(“d62”); 
     removable.add(“d63”); 
     //Removing MALAYALAM NUMBERS 
     removable.add(“d66”); 
     removable.add(“d67”); 
     removable.add(“d68”); 
     removable.add(“d69”); 
     removable.add(“d6a”); 
     removable.add(“d6b”); 
     removable.add(“d6c”); 
     removable.add(“d6d”); 
     removable.add(“d6e”); 
     removable.add(“d6f”); 
     //Removed 
     //Extras Spacing 
     removable.add(“d3e”); 
     removable.add(“d3f”); 
     removable.add(“d40”); 
     removable.add(“d41”); 
     removable.add(“d42”); 
     removable.add(“d43”); 
     removable.add(“d46”); 
     removable.add(“d47”); 
     removable.add(“d48”); 
     removable.add(“d4a”); 
     removable.add(“d4b”); 
     removable.add(“d4c”); 
     removable.add(“d4d”); 
     removable.add(“d57”); 
     //Extra Removables 
     removable.add(“d60”); 
     removable.add(“d61”); 
     removable.add(“d7f”); 
     removable.add(“d7f”); 
     // 
     extrachars = new ArrayList<Character>(); 
     charStrings = new ArrayList<String>(); 
     Character a = ‘u0D04’; 
     for (int i = 0; i < 123; i++) { 
       if (removable.contains(Integer.toHexString(a))) { 
         a++; 
         continue; 
       } 
       extrachars.add(a); 
       a++; 
     } 
     extrachars.add((‘u0D7A’)); 
     extrachars.add((‘u0D7B’)); 
     extrachars.add((‘u0D7C’)); 
     extrachars.add((‘u0D7D’)); 
     extrachars.add((‘u0D7E’)); 
     extrachars.add((‘u0D7F’)); 
     extrachars.add((‘u0D02’)); 
     extrachars.add((‘u0D03’)); 
     extrachars.add((‘u0D3E’)); 
     extrachars.add((‘u0D3F’)); 
     extrachars.add((‘u0D40’)); 
     extrachars.add((‘u0D41’)); 
     extrachars.add((‘u0D42’)); 
     extrachars.add((‘u0D43’)); 
     extrachars.add((‘u0D46’)); 
     extrachars.add((‘u0D47’)); 
     extrachars.add((‘u0D48’)); 
     extrachars.add((‘u0D4A’)); 
     extrachars.add((‘u0D4B’)); 
     extrachars.add((‘u0D4C’)); 
     extrachars.add((‘u0D4D’)); 
     extrachars.add((‘u0D57’)); 
   } 
   private void addExtraButttons() { 
     JButton btn = new JButton(“BACK”); 
     btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
         try { 
           display.requestFocus(); 
           Robot r = new Robot(); 
           r.keyPress(KeyEvent.VK_BACK_SPACE); 
           r.keyRelease(KeyEvent.VK_BACK_SPACE); 
         } catch (AWTException ex) { 
           Logger.getLogger(keyboard.class.getName()).log(Level.SEVERE, null, ex); 
         } 
       } 
     }); 
     cntr.add(btn); 
     btn = new JButton(“SPACE”); 
     btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
         try { 
           display.requestFocus(); 
           Robot r = new Robot(); 
           r.keyPress(KeyEvent.VK_SPACE); 
           r.keyRelease(KeyEvent.VK_SPACE); 
         } catch (AWTException ex) { 
           Logger.getLogger(keyboard.class.getName()).log(Level.SEVERE, null, ex); 
         } 
       } 
     }); 
     cntr.add(btn); 
     btn = new JButton(“SAVE”); 
     btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
         Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); 
         clpbrd.setContents(new StringSelection(display.getText()), null); 
         JOptionPane.showMessageDialog(rootPane, “Copied To Clipboard”); 
       } 
     }); 
     cntr.add(btn); 
   } 
   @SuppressWarnings(“unchecked”) 
   // <editor-fold defaultstate=”collapsed” desc=”Generated Code”>//GEN-BEGIN:initComponents 
   private void initComponents() { 
     cntr = new javax.swing.JPanel(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     display = new javax.swing.JTextArea(); 
     jLabel1 = new javax.swing.JLabel(); 
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     setTitle(“Malayalam Keyboard”); 
     cntr.setLayout(new java.awt.GridLayout(0, 15)); 
     display.setColumns(20); 
     display.setLineWrap(true); 
     display.setRows(1); 
     jScrollPane1.setViewportView(display); 
     jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); 
     jLabel1.setText(“Developed By : genuinecoder.com”); 
     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup( 
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1213, Short.MAX_VALUE) 
       .addComponent(cntr, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     ); 
     layout.setVerticalGroup( 
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
         .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 78, Short.MAX_VALUE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(cntr, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE) 
         .addGap(5, 5, 5) 
         .addComponent(jLabel1)) 
     ); 
     pack(); 
   }// </editor-fold>//GEN-END:initComponents 
   public static void main(String args[]) { 
     //<editor-fold defaultstate=”collapsed” desc=” Look and feel setting code (optional) “> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
      * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html  
      */ 
     try { 
       for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
         if (“Nimbus”.equals(info.getName())) { 
           javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
           break; 
         } 
       } 
     } catch (ClassNotFoundException ex) { 
       java.util.logging.Logger.getLogger(keyboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
       java.util.logging.Logger.getLogger(keyboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
       java.util.logging.Logger.getLogger(keyboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
       java.util.logging.Logger.getLogger(keyboard.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 
     java.awt.EventQueue.invokeLater(new Runnable() { 
       public void run() { 
         new keyboard().setVisible(true); 
       } 
     }); 
   } 
   // Variables declaration – do not modify//GEN-BEGIN:variables 
   private javax.swing.JPanel cntr; 
   private javax.swing.JTextArea display; 
   private javax.swing.JLabel jLabel1; 
   private javax.swing.JScrollPane jScrollPane1; 
   // End of variables declaration//GEN-END:variables 
 } 
Keywords : Free malayalam keyboard for windows, Linux and Mac. Java Malayalam Keyboard, Malayalam keyboard program
Muhammed Afsal Villan
Muhammed Afsal Villan is an experienced full-stack developer, specialized in desktop and mobile application development. He also regularly publishes quality tutorials on his YouTube channel named 'Genuine Coder'. He likes to contribute to open-source projects and is always enthusiastic about new technologies.

2 COMMENTS