Use of KeyEvent.VK_DELETE

i want to make a check on the key typed and if it is the delete key than i want to perform a certain function.This check works for all the keys except the delete key.Could you please point out where am i going wrong.here ideally it should print delete key pressed when i type the delete key but it does not.
invtext.addKeyListener(new KeyAdapter(){
               public void keyTyped(KeyEvent ke){
                    char c=ke.getKeyChar();
                    if(c == KeyEvent.VK_DELETE){
                         System.out.println("delete key pressed");
thanks

Hi,
int keyVal = ke.getKeyCode ();
if (keyVal == KeyEvent.VK_DELETE)
System.out.println ("Delete has been pressed");
Hope this will help
Bye

Similar Messages

  • KeyEvent+JTable Cell?

    Hi There
    I Have a JTable in Which The ClickCountToStart Is set To 0
    and I Want To Perform Some KeyAction If Any Row In The JTable Is Being Selected
    that if the user presses delete key on a row a JOptionPane Appear
    and I Don't Want To Know How To Do That?
    i tried using the following code but it really doesn't work:
    table1.addKeyListener(new KeyAdapter(){     
                                 public void keyPressed(KeyEvent evt){
                                      System.out.println("Key Pressesd");//doesn't print this
              if(evt.getKeyCode()==KeyEvent.VK_DELETE){               
              JOptionPane.showMessageDialog(null, " Delete Pressed ", "Message", JOptionPane.INFORMATION_MESSAGE);     //doesn't show this
         });is there's a problem with the code
    or there's any other ideas how to do that?

    You didn't cross-post this question in multiple forums without mentioning the presence of the cross-posts in all the threads did you? I know that you didn't do this because you are a considerate guy and you know how this is considered to be very rude, how it frustrates folks to know end to spend free time working to help someone only to find that they wasted their time, that the answer was placed in a cross-post hours before,... right?

  • Problem KeyEvent Java Bean  (Francois Degrelle)

    Hello !
    I have a problem with the KeyEvent Java Bean (keykressed.zip)
    from the Forms - PJC and JavaBean store !
    1.
    I call a forms-dialog and use the KeyEvent Java Bean.
    (Set_Custom_Property('BL.BEAN',1,'INIT','')
    2.
    I call a second forms-dialog and use the KeyEvent Java Bean too.
    Set_Custom_Property('BL.BEAN',1,'INIT','')
    3.
    Now i go back to the first forms-dialog and this dialog hangs...
    (No input over keyboard possible !)
    Maybe you can help me ?
    Many thanks in advance !
    Thomas

    Hello,
    Re-load the JAR file from the article.
    I still get an error in the Java console after closing the second dialog, but the key is correctly sent to the first form, so it seems to be OK.
    Francois

  • Some KeyEvent help needed please

    Hi,
    I'm trying to add a KeyEvent to my little file viewer app.......... basically what I'm trying to do is that when the user types in the path to a file in the file textfield (ie... c:\test\mytest.txt ) and hits the ENTER key the file should display the file in the above textarea by calling the showFile() method.
    My browse button to select a file works and populates the textarea using showFile() but I can't seem to get the ENTER keyEvent.... I only have 1 poor example of keyevents in my textbook....
    Could someone lend a hand please or give me a hint on how to get the ENTER keyevent to pick up please?? The keyevent attempts at the bottom of the code.... Thank you.
    // ViewFile.java: Read a text file and store it in a text area
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    public class ViewFile extends JFrame implements ActionListener {
      // Button to Browse
      private JButton jbtBrowse = new JButton("Browse");
      private JFileChooser jFileChooser = new JFileChooser();
      // Text field to receive file name
      private JTextField jtfFilename = new JTextField(12);
      // Text area to display file
      private JTextArea jtaFile = new JTextArea();
      // Obtain the system line separator
      static String lineSeparator = (String)java.security.
        AccessController.doPrivileged(
        new sun.security.action.GetPropertyAction("line.separator"));
      /** Main method */
      public static void main(String[] args) {
        ViewFile frame = new ViewFile();
        frame.setTitle("Exercise 17.5: View File");
        frame.setSize(400, 300);
        frame.setVisible(true);
      /**  Default constructor */
      public ViewFile() {
        // Panel p to hold a label, a text field, and a button
        Panel p = new Panel();
        p.setLayout(new BorderLayout());
        p.add(new Label("Filename"), BorderLayout.WEST);
        p.add(jtfFilename, BorderLayout.CENTER);
        jtfFilename.setBackground(Color.yellow);
        jtfFilename.setForeground(Color.red);
        p.add(jbtBrowse, BorderLayout.EAST);
        // Add jtaFile to a scroll pane
        JScrollPane jsp = new JScrollPane(jtaFile);
        // Add jsp and p to the frame
        getContentPane().add(jsp, BorderLayout.CENTER);
        getContentPane().add(p, BorderLayout.SOUTH);
        // Register listener
        jbtBrowse.addActionListener(this);
      /** Handle the "Browse" button */
      public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jbtBrowse)
        jFileChooser.setCurrentDirectory(new File("."));
           jFileChooser.showOpenDialog(this);     
         jtfFilename.setText(jFileChooser.getSelectedFile().getPath());
         showFile();
      /** Display the file in the text area */
      private void showFile() {
        // Use a BufferedReader to read text from the file
        BufferedReader infile = null;
        // Get file name from the text field
        String filename = jtfFilename.getText().trim();
        String inLine;
        try {
          // Create a buffered stream
          infile = new BufferedReader(new FileReader(filename));
          // Read a line and append the line to the text area
          while ((inLine = infile.readLine()) != null) {
            jtaFile.append(inLine + lineSeparator);
        catch (FileNotFoundException ex) {
          System.out.println("File not found: " + filename);
        catch (IOException ex) {
          System.out.println(ex.getMessage());
        finally {
          try {
            if (infile != null) infile.close();
          catch (IOException ex) {
            System.out.println(ex.getMessage());
        // KeyboardPanel for receiving key input
        class KeyboardPanel extends JFrame implements KeyListener {
        public KeyboardPanel() {
        addKeyListener(this); // Register listener
           public void keyReleased(KeyEvent e) {
         public void keyTyped(KeyEvent e) {
              if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                  showFile();
           public void keyPressed(KeyEvent e) {
    }

    I noticed what you did works even if I delete all the KeyEvent code I added at the bottom. Yes, it uses the actionlistener I added to the textfield rather than the keylistener you were adding. An actionlistener on a textfield runs when you hit enter.
    How is your code picking up that there is a filepath in the textfield?? It isn't, it's just calling showField()
    I assume getSouce just reads any value that might be in that field and load it as the value when you hit Enter. Nope, getSource() just gets the source of the actionEvent. either the button of the textfield.
    If so, why do you not have to explicitly add code (like I was trying to do) to look for the Enter key being pressed using a keyEvent?? Could you (or anyone) explain that please? Thank you. I did add code.jtfFilename.addActionListener(this); // addedIt just doesn't use a keylistener.

  • Tab transversal while using JTextArea as a JTable cell editor..

    I'm working on a project that will use a JTable with a JTextArea cell editor to create a chart for classroom scheduling. Searching on Google, I found a way to use a JTextArea as a cell editor and render the cell properly. However, when editing a cell, pressing the Tab key inserts a tab, rather than leaving the cell and going to the next one, as happens with just a regular JTable. In fact, none of the keyboard shortcuts that work on a JTable work once the JTextArea cell editor is used. Does anyone know of any way to resolve this? Below is some code I'm using to create a sample GUI, just to verify that I can do this. Another question is would it be easier to use a bunch of JLabels and JTextAreas, remove the padding from those JTextAreas, and try to allow for Tab transversals between stand-alone JTextAreas, rather than JTextAreas as JTable cell editors?
    Thanks!
    package edu.elon.table;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.table.*;
    public class GUI
         private JFrame frame;
         private String[] columnNames = {"Classroom", "8:00-9:10", "9:25-10:35",
              "10:50-12:00", "12:15-1:25", "1:40-2:50", "1:40-3:20 (MW)",
              "3:35-5:15 (MW)", "5:30-7:10 (MW)"};
         private Object[][] data = {columnNames,
              {"ALAM 201 (42)\nENG 110 LAB", "", "", "", "", "", "", "", ""},
              {"ALAM 202 (42)\nDP/DVD", "", "", "", "", "", "", "", ""},
              {"ALAM 203 (38)\nDP/DVD", "", "", "", "", "", "", "", ""},
              {"ALAM 205 (40)\n", "", "", "", "", "", "", "", ""},
              {"ALAM 206 (39)\nSINK, TV/VCR", "", "", "", "", "", "", "", ""},
              {"ALAM 207 (40+)\nDP/DVD", "", "", "", "", "", "", "", ""},
              {"ALAM 214 (38)\nTV/VCR", "", "", "", "", "", "", "", ""},
              {"ALAM 215 (42)\nTV/VCR", "", "", "", "", "", "", "", ""},
              {"ALAM 216 (42)\n", "", "", "", "", "", "", "", ""},
              {"ALAM 301 (40)\nTV/VCR", "", "", "", "", "", "", "", ""},
              {"ALAM 302 (38)\nDP/DVD", "", "", "", "", "", "", "", ""},
              {"ALAM 304 (35)\nFRENCH", "", "", "", "", "", "", "", ""},
              {"ALAM 314 (30)\nDP, PSY, COMPUTER ASSISTED", "", "", "", "", "", "",
              {"ALAM 315 (40)\nPC LAB, DP/DVD", "", "", "", "", "", "", "", ""}};
         private JTable table;
         public GUI()
              frame = new JFrame();
              table = new JTable(data, columnNames);
              table.setRowHeight(table.getRowHeight()*2);
              TableColumnModel cModel = table.getColumnModel();
              TextAreaRenderer renderer = new TextAreaRenderer();
              TextAreaEditor editor = new TextAreaEditor();
              for (int i = 0; i < cModel.getColumnCount(); i++)
                   cModel.getColumn(i).setCellRenderer(renderer);
                   cModel.getColumn(i).setCellEditor(editor);
              frame.setLayout(new GridLayout(1,0));
              frame.add(table);
              frame.pack();
              frame.setVisible(true);
    public static void main (String[] args)
    GUI gui = new gui();
    * Written by Dr. Heinz Kabutz, found through online newsletter via Google.
    class TextAreaRenderer extends JTextArea
    implements TableCellRenderer {
    private final DefaultTableCellRenderer adaptee =
    new DefaultTableCellRenderer();
    /** map from table to map of rows to map of column heights */
    private final Map cellSizes = new HashMap();
    public TextAreaRenderer() {
    setLineWrap(true);
    setWrapStyleWord(true);
    public Component getTableCellRendererComponent(//
    JTable table, Object obj, boolean isSelected,
    boolean hasFocus, int row, int column) {
    // set the colours, etc. using the standard for that platform
    adaptee.getTableCellRendererComponent(table, obj,
    isSelected, hasFocus, row, column);
    setForeground(adaptee.getForeground());
    setBackground(adaptee.getBackground());
    setBorder(adaptee.getBorder());
    setFont(adaptee.getFont());
    setText(adaptee.getText());
    // This line was very important to get it working with JDK1.4
    TableColumnModel columnModel = table.getColumnModel();
    setSize(columnModel.getColumn(column).getWidth(), 100000);
    int height_wanted = (int) getPreferredSize().getHeight();
    addSize(table, row, column, height_wanted);
    height_wanted = findTotalMaximumRowSize(table, row);
    if (height_wanted != table.getRowHeight(row)) {
    table.setRowHeight(row, height_wanted);
    return this;
    private void addSize(JTable table, int row, int column,
    int height) {
    Map rows = (Map) cellSizes.get(table);
    if (rows == null) {
    cellSizes.put(table, rows = new HashMap());
    Map rowheights = (Map) rows.get(new Integer(row));
    if (rowheights == null) {
    rows.put(new Integer(row), rowheights = new HashMap());
    rowheights.put(new Integer(column), new Integer(height));
    * Look through all columns and get the renderer. If it is
    * also a TextAreaRenderer, we look at the maximum height in
    * its hash table for this row.
    private int findTotalMaximumRowSize(JTable table, int row) {
    int maximum_height = 0;
    Enumeration columns = table.getColumnModel().getColumns();
    while (columns.hasMoreElements()) {
    TableColumn tc = (TableColumn) columns.nextElement();
    TableCellRenderer cellRenderer = tc.getCellRenderer();
    if (cellRenderer instanceof TextAreaRenderer) {
    TextAreaRenderer tar = (TextAreaRenderer) cellRenderer;
    maximum_height = Math.max(maximum_height,
    tar.findMaximumRowSize(table, row));
    return maximum_height;
    private int findMaximumRowSize(JTable table, int row) {
    Map rows = (Map) cellSizes.get(table);
    if (rows == null) return 0;
    Map rowheights = (Map) rows.get(new Integer(row));
    if (rowheights == null) return 0;
    int maximum_height = 0;
    for (Iterator it = rowheights.entrySet().iterator();
    it.hasNext();) {
    Map.Entry entry = (Map.Entry) it.next();
    int cellHeight = ((Integer) entry.getValue()).intValue();
    maximum_height = Math.max(maximum_height, cellHeight);
    return maximum_height;
    * Written by Dr. Heinz Kabutz, found through online newsletter via Google.
    class TextAreaEditor extends DefaultCellEditor
    public TextAreaEditor() {
         super(new JTextField());
    final JTextArea textArea = new JTextArea();
    textArea.setWrapStyleWord(true);
    textArea.setLineWrap(true);
    JScrollPane scrollPane = new JScrollPane(textArea);
    scrollPane.setBorder(null);
    editorComponent = scrollPane;
    delegate = new DefaultCellEditor.EditorDelegate() {
    public void setValue(Object value)
    textArea.setText((value != null) ? value.toString() : "");
    public Object getCellEditorValue()
    return textArea.getText();
    }

    Using the KeyEvent manager and playing around with the JTextArea, I was able to get a JTable using JTextAreas as the cell editors that worked very close to the way the regular JTable works. You have to hit Tab twice to shift focus to another cell, or hit Tab once and then an arrow key. Also, Alt-Enter will allow you to enter a cell for editing. All of the changes were made to the TextAreaEditor class, which should now read as follows:
    class TextAreaEditor extends DefaultCellEditor implements KeyListener
         private int lastKeyCode;
         public TextAreaEditor(final JTable table) {
              super(new JTextField());
              lastKeyCode = KeyEvent.CTRL_DOWN_MASK;
              final JTextArea textArea = new JTextArea();
              textArea.setWrapStyleWord(true);
              textArea.setLineWrap(true);
              textArea.addKeyListener(this);
              textArea.setFocusable(true);
              textArea.setFocusAccelerator((char) KeyEvent.VK_ENTER);
              JScrollPane scrollPane = new JScrollPane(textArea);
              scrollPane.setBorder(null);
              scrollPane.setFocusable(false);
              editorComponent = scrollPane;
              delegate = new DefaultCellEditor.EditorDelegate() {
                   public void setValue(Object value) {
                        textArea.setText((value != null) ? value.toString() : "");
                   public Object getCellEditorValue() {
                        return textArea.getText();
         public void keyTyped(KeyEvent ke)
              // TODO Auto-generated method stub
         public void keyPressed(KeyEvent ke)
              if (ke.getKeyCode() == KeyEvent.VK_TAB)
                   ke.consume();
                   KeyboardFocusManager.getCurrentKeyboardFocusManager()
                             .focusNextComponent();
                   return;
              if (ke.getKeyCode() == KeyEvent.VK_TAB && ke.isShiftDown())
                   ke.consume();
                   KeyboardFocusManager.getCurrentKeyboardFocusManager()
                             .focusPreviousComponent();
                   return;
              if ((lastKeyCode == KeyEvent.CTRL_DOWN_MASK) &&
                        (ke.getKeyCode() == KeyEvent.VK_ENTER))
                   ke.consume();
                   editorComponent.requestFocus();
              else
                   lastKeyCode = ke.getKeyCode();
         public void keyReleased(KeyEvent ke)
              // TODO Auto-generated method stub
         }

  • KeyBindings using WHEN_IN_FOCUSED_WINDOW not working for me !!

    Hi,
    I'm trying to capture "delete" key press event in JBtnPanel class below irrespective of where the current focus is but event is never sent to JBtnPanel class. Any idea where the bug might be ? I print a message to test whether the key is handled by JBtnPanel but NO message is printed. Here as shown towards the end of code snippet, the mainPanel contains childPanel and then the mainPanel is added to contentpane.
         import java.awt.*;
         import java.awt.event.*;
         import javax.swing.*;
         class JBtnPanel extends JPanel {
              JBtnPanel() {
                   Action HandleDelete = new AbstractAction() {
                       public void actionPerformed(ActionEvent e) {
                            System.out.println("This is a test !!");
                   InputMap input = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
                   ActionMap action = this.getActionMap();
                   input.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.CTRL_MASK),
                             "HandleDelete");
                   action.put("HandleDelete", HandleDelete);
         class TextPanel extends JPanel {
              // override the paintComponent method
           // THE MAIN DEMO OF THIS EXAMPLE:
           public void paintComponent(Graphics g) {
             super.paintComponent(g);
             Font f = new Font("SansSerif", Font.BOLD, 14);
             Font fi = new Font("SansSerif", Font.BOLD + Font.ITALIC, 14);
             FontMetrics fm = g.getFontMetrics(f);
             FontMetrics fim = g.getFontMetrics(fi);
             int cx = 75; int cy = 100;
             g.setFont(f);
             g.drawString("Hello, ", cx, cy);
             cx += fm.stringWidth("Hello, ");
             g.setFont(fi);
             g.drawString("World!", cx, cy);
           } //paintComponent
           //=============================================
           ///////////// main ////////////////////////////
           public static void main(String[] args) {
             test f = new test("My Hello World Frame");
             f.show();
           } //main
         } //class TextPanel
                  test Class
         class test extends JFrame {
              public void paintComponent(Graphics g) {
                   int i = 0;
                   ++i;
              public test(String s) {
              // Frame Parameters
              setTitle(s);
              setSize(300,200); // default size is 0,0
              setLocation(10,200); // default is 0,0 (top left corner)
              // Window Listeners
              addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                   System.exit(0);
                } //windowClosing
              }); //addWindowLister
              // Add Panels
              JBtnPanel childPanel = new JBtnPanel();
              childPanel.add(new JButton("Fine"));
              TextPanel mainPanel = new TextPanel();
              mainPanel.add(childPanel);
              Container contentPane = getContentPane();
              contentPane.add(mainPanel);
           } //constructor test
         } //class test

    It works for me. Are you wanting "delete" or "control+delete"? Cuz you said delete, but your code says control+delete
    input.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "HandleDelete");

  • How to use DefaultEditorKit actions?3F

    How you can make this kind of situation to happen:
    if (keypressed =  'a'                                                                                                                                                                                

    Hi.
    Your class must have:
    implements KeyListener
    After that you'll have :
    void keyPressed(KeyEvent k)
    You can use the KeyEvent for checking/putting some actions depending of what key was pressed.
    Bye.
    George

  • Can someone pls help me with this code

    The method createScreen() creates the first screen wherein the user makes a selection if he wants all the data ,in a range or single data.The problem comes in when the user makes a selection of single.that then displays the singleScreen() method.Then the user has to input a key data like date or invoice no on the basis of which all the information for that set of data is selected.Now if the user inputs a wrong key that does not exist for the first time the program says invalid entry of data,after u click ok on the option pane it prompts him to enter the data again.But since then whenever the user inputs wrong data the program says wrong data but after displaying the singlescreen again does not wait for input from the user it again flashes the option pane with the invalid entry message.and this goes on doubling everytime the user inputs wrong data.the second wrong entry of data flashes the error message twice,the third wrong entry flashes the option pane message 4 times and so on.What actually happens is it does not wait at the singlescreen() for user to input data ,it straight goes into displaying the JOptionPane message for wrong data entry so we have to click the optiion pane twice,four times and so on.
    Can someone pls help me with this!!!!!!!!!
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.text.*;
    import java.util.*;
    public class MainMenu extends JFrame implements ActionListener,ItemListener{
    //class     
         FileReaderDemo1 fd=new FileReaderDemo1();
         FileReaderDemo1 fr;
         Swing1Win sw;
    //primary
         int monthkey=1,counter=0;
         boolean flag=false,splitflag=false;
         String selection,monthselection,dateselection="01",yearselection="00",s,searchcriteria="By Date",datekey,smonthkey,invoiceno;
    //arrays
         String singlesearcharray[];
         String[] monthlist={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};
         String[] datelist=new String[31];
         String[] yearlist=new String[100];
         String[] searchlist={"By Date","By Invoiceno"};
    //collection
         Hashtable allinvoicesdata=new Hashtable();
         Vector data=new Vector();
         Enumeration keydata;
    //components
         JButton next=new JButton("NEXT>>");
         JComboBox month,date,year,search;
         JLabel bydate,byinvno,trial;
         JTextField yeartext,invtext;
         JPanel panel1,panel2,panel3,panel4;
         JRadioButton single,range,all;
         ButtonGroup group;
         JButton select=new JButton("SELECT");
    //frame and layout declarations
         JFrame jf;
         Container con;
         GridBagLayout gridbag=new GridBagLayout();
         GridBagConstraints gc=new GridBagConstraints();
    //constructor
         MainMenu(){
              jf=new JFrame();
              con=getContentPane();
              con.setLayout(null);
              fr=new FileReaderDemo1();
              createScreen();
              setSize(500,250);
              setLocation(250,250);
              setVisible(true);
    //This is thefirst screen displayed
         public void createScreen(){
              group=new ButtonGroup();
              single=new JRadioButton("SINGLE");
              range=new JRadioButton("RANGE");
              all=new JRadioButton("ALL");
              search=new JComboBox(searchlist);
              group.add(single);
              group.add(range);
              group.add(all);
              single.setBounds(100,50,100,20);
              search.setBounds(200,50,100,20);
              range.setBounds(100,90,100,20);
              all.setBounds(100,130,100,20);
              select.setBounds(200,200,100,20);
              con.add(single);
              con.add(search);
              con.add(range);
              con.add(all);
              con.add(select);
              search.setEnabled(false);
              single.addItemListener(this);
              search.addActionListener(new MyActionListener());     
              range.addItemListener(this);
              all.addItemListener(this);
              select.addActionListener(this);
         public class MyActionListener implements ActionListener{
              public void actionPerformed(ActionEvent a){
                   JComboBox cb=(JComboBox)a.getSource();
                   if(a.getSource().equals(month))
                        monthkey=((cb.getSelectedIndex())+1);
                   if(a.getSource().equals(date)){
                        dateselection=(String)cb.getSelectedItem();
                   if(a.getSource().equals(year))
                        yearselection=(String)cb.getSelectedItem();
                   if(a.getSource().equals(search)){
                        searchcriteria=(String)cb.getSelectedItem();
         public void itemStateChanged(ItemEvent ie){
              if(ie.getItem()==single){
                   selection="single";     
                   search.setEnabled(true);
              else if (ie.getItem()==all){
                   selection="all";
                   search.setEnabled(false);
              else if (ie.getItem()==range){
                   search.setEnabled(false);
         public void actionPerformed(ActionEvent ae){          
              if(ae.getSource().equals(select))
                        if(selection.equals("single")){
                             singleScreen();
                        if(selection.equals("all"))
                             sw=new Swing1Win();
              if(ae.getSource().equals(next)){
                   if(monthkey<9)
                        smonthkey="0"+monthkey;
                   System.out.println(smonthkey+"/"+dateselection+"/"+yearselection+"it prints this");
                   allinvoicesdata=fr.read(searchcriteria);
                   if (searchcriteria.equals("By Date")){
                        System.out.println("it goes in this");
                        singleinvoice(smonthkey+"/"+dateselection+"/"+yearselection);
                   else if (searchcriteria.equals("By Invoiceno")){
                        invoiceno=invtext.getText();
                        singleinvoice(invoiceno);
                   if (flag == false){
                        System.out.println("flag is false");
                        singleScreen();
                   else{
                   System.out.println("its in here");
                   singlesearcharray=new String[data.size()];
                   data.copyInto(singlesearcharray);
                   sw=new Swing1Win(singlesearcharray);
         public void singleinvoice(String searchdata){
              keydata=allinvoicesdata.keys();
              while(keydata.hasMoreElements()){
                        s=(String)keydata.nextElement();
                        if(s.equals(searchdata)){
                             System.out.println(s);
                             flag=true;
                             break;
              if (flag==true){
                   System.out.println("vector found");
                   System.exit(0);
                   data= ((Vector)(allinvoicesdata.get(s)));
              else{
                   JOptionPane.showMessageDialog(jf,"Invalid entry of date : choose again");     
         public void singleScreen(){
              System.out.println("its at the start");
              con.removeAll();
              SwingUtilities.updateComponentTreeUI(con);
              con.setLayout(null);
              counter=0;
              panel2=new JPanel(gridbag);
              bydate=new JLabel("By Date : ");
              byinvno=new JLabel("By Invoice No : ");
              dateComboBox();
              invtext=new JTextField(6);
              gc.gridx=0;
              gc.gridy=0;
              gc.gridwidth=1;
              gridbag.setConstraints(month,gc);
              panel2.add(month);
              gc.gridx=1;
              gc.gridy=0;
              gridbag.setConstraints(date,gc);
              panel2.add(date);
              gc.gridx=2;
              gc.gridy=0;
              gc.gridwidth=1;
              gridbag.setConstraints(year,gc);
              panel2.add(year);
              bydate.setBounds(100,30,60,20);
              con.add(bydate);
              panel2.setBounds(170,30,200,30);
              con.add(panel2);
              byinvno.setBounds(100,70,100,20);
              invtext.setBounds(200,70,50,20);
              con.add(byinvno);
              con.add(invtext);
              next.setBounds(300,200,100,20);
              con.add(next);
              if (searchcriteria.equals("By Invoiceno")){
                   month.setEnabled(false);
                   date.setEnabled(false);
                   year.setEnabled(false);
              else if(searchcriteria.equals("By Date")){
                   byinvno.setEnabled(false);
                   invtext.setEnabled(false);
              monthkey=1;
              dateselection="01";
              yearselection="00";
              month.addActionListener(new MyActionListener());
              date.addActionListener(new MyActionListener());
              year.addActionListener(new MyActionListener());
              next.addActionListener(this);
              invtext.addKeyListener(new KeyAdapter(){
                   public void keyTyped(KeyEvent ke){
                        char c=ke.getKeyChar();
                        if ((c == KeyEvent.VK_BACK_SPACE) ||(c == KeyEvent.VK_DELETE)){
                             System.out.println(counter+"before");
                             counter--;               
                             System.out.println(counter+"after");
                        else
                             counter++;
                        if(counter>6){
                             System.out.println(counter);
                             counter--;
                             ke.consume();
                        else                    
                        if(!((Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE)))){
                             getToolkit().beep();
                             counter--;     
                             JOptionPane.showMessageDialog(null,"please enter numerical value");
                             ke.consume();
              System.out.println("its at the end");
         public void dateComboBox(){          
              for (int counter=0,day=01;day<=31;counter++,day++)
                   if(day<=9)
                        datelist[counter]="0"+String.valueOf(day);
                   else
                        datelist[counter]=String.valueOf(day);
              for(int counter=0,yr=00;yr<=99;yr++,counter++)
                   if(yr<=9)
                        yearlist[counter]="0"+String.valueOf(yr);
                   else
                        yearlist[counter]=String.valueOf(yr);
              month=new JComboBox(monthlist);
              date=new JComboBox(datelist);
              year=new JComboBox(yearlist);
         public static void main(String[] args){
              MainMenu mm=new MainMenu();
         public class WindowHandler extends WindowAdapter{
              public void windowClosing(WindowEvent we){
                   jf.dispose();
                   System.exit(0);
    }     

    Hi,
    I had a similar problem with a message dialog. Don't know if it is a bug, I was in a hurry and had no time to search the bug database... I found a solution by using keyPressed() and keyReleased() instead of keyTyped():
       private boolean pressed = false;
       public void keyPressed(KeyEvent e) {
          pressed = true;
       public void keyReleased(KeyEvent e) {
          if (!pressed) {
             e.consume();
             return;
          // Here you can test whatever key you want
       //...I don't know if it will help you, but it worked for me.
    Regards.

  • How to set a   background for jFrame?

    Hai.i have a code for background image.i.e
    * TextOver.java
    * Created on June 23, 2008, 1:53 PM
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    public class TextOver
    private static final String IMAGE_PATH =
    "http://upload.wikimedia.org/wikipedia/commons/b/b5/HMS_Cardiff_%28D108%29_1.jpg";
    private BufferedImage image;
    private JTextArea textarea = new JTextArea(20, 40);
    private JPanel mainPanel = new JPanel()
    @Override
    protected void paintComponent(Graphics g)
    super.paintComponent(g);
    if (image != null)
    g.drawImage(image, 0, 0, this);
    public TextOver()
    URL imageUrl;
    try
    imageUrl = new URL(IMAGE_PATH);
    image = ImageIO.read(imageUrl);
    Dimension imageSize = new Dimension(image.getWidth(), image.getHeight());
    mainPanel.setPreferredSize(imageSize);
    JScrollPane scrollpane = new JScrollPane(textarea);
    textarea.setOpaque(false);
    scrollpane.setOpaque(false);
    scrollpane.getViewport().setOpaque(false);
    mainPanel.add(scrollpane);
    catch (MalformedURLException e)
    e.printStackTrace();
    catch (IOException e)
    e.printStackTrace();
    public JPanel getPanel()
    return mainPanel;
    private static void createAndShowGUI()
    admin_login_code a=new admin_login_code();
    a.setVisible(false);
    JFrame frame = new JFrame("TextAreaOverImage Application");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new TextOver().getPanel());
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(false);
    public static void main(String[] args)
    javax.swing.SwingUtilities.invokeLater(new Runnable()
    public void run()
    createAndShowGUI();
    i want to give this backgground to my existing jFrame something like
    import java.sql.*;
    import java.io.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class admin_login_code extends javax.swing.JFrame {
    String admin_name;
    String password;
    Connection con;
    Statement stmt;
    ResultSet rs;
    public admin_login_code() {
    initComponents();
    jPasswordField1.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
    char c = e.getKeyChar();
    if (!(Character.isDigit(c) ||
    (c == KeyEvent.VK_BACK_SPACE) ||
    (c == KeyEvent.VK_DELETE))) {
    getToolkit().beep();
    e.consume();
    jFormattedTextField1.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
    char c = e.getKeyChar();
    if (!(Character.isLetter(c) ||
    (c == KeyEvent.VK_BACK_SPACE) ||
    (c == KeyEvent.VK_DELETE))) {
    getToolkit().beep();
    e.consume();
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {
    jLabel1 = new javax.swing.JLabel();
    jPanel1 = new javax.swing.JPanel();
    jLabel2 = new javax.swing.JLabel();
    jFormattedTextField1 = new javax.swing.JFormattedTextField();
    jLabel4 = new javax.swing.JLabel();
    jPasswordField1 = new javax.swing.JPasswordField();
    jPanel2 = new javax.swing.JPanel();
    jButton1 = new javax.swing.JButton();
    jButton3 = new javax.swing.JButton();
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    jLabel1.setFont(new java.awt.Font("Tahoma", 1, 36));
    jLabel1.setForeground(new java.awt.Color(255, 0, 0));
    jLabel1.setText("ADMIN LOGIN");
    jLabel2.setFont(new java.awt.Font("Tahoma", 1, 24));
    jLabel2.setText("Admin Name");
    jFormattedTextField1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jFormattedTextField1ActionPerformed(evt);
    jLabel4.setFont(new java.awt.Font("Tahoma", 1, 24));
    jLabel4.setText("Password");
    jPasswordField1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jPasswordField1ActionPerformed(evt);
    org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
    jPanel1.setLayout(jPanel1Layout);
    jPanel1Layout.setHorizontalGroup(
    jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(jPanel1Layout.createSequentialGroup()
    .add(39, 39, 39)
    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(jLabel4)
    .add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 161, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
    .add(43, 43, 43)
    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(jPasswordField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 190, Short.MAX_VALUE)
    .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 190, Short.MAX_VALUE))
    .addContainerGap())
    jPanel1Layout.setVerticalGroup(
    jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(jPanel1Layout.createSequentialGroup()
    .add(47, 47, 47)
    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
    .add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 34, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .add(jFormattedTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
    .add(60, 60, 60)
    .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(jLabel4)
    .add(jPasswordField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
    .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    jButton1.setText("Login");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton1ActionPerformed(evt);
    jButton3.setText("Exit");
    jButton3.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton3ActionPerformed(evt);
    org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
    jPanel2.setLayout(jPanel2Layout);
    jPanel2Layout.setHorizontalGroup(
    jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel2Layout.createSequentialGroup()
    .add(38, 38, 38)
    .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 93, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 110, Short.MAX_VALUE)
    .add(jButton3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 93, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .add(55, 55, 55))
    jPanel2Layout.setVerticalGroup(
    jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(jPanel2Layout.createSequentialGroup()
    .add(38, 38, 38)
    .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
    .add(jButton3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 32, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .add(jButton1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 32, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
    .addContainerGap(30, Short.MAX_VALUE))
    org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(layout.createSequentialGroup()
    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(layout.createSequentialGroup()
    .add(574, 574, 574)
    .add(jLabel1))
    .add(layout.createSequentialGroup()
    .add(459, 459, 459)
    .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
    .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))))
    .addContainerGap(521, Short.MAX_VALUE))
    layout.setVerticalGroup(
    layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    .add(layout.createSequentialGroup()
    .add(149, 149, 149)
    .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 66, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .add(43, 43, 43)
    .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .add(42, 42, 42)
    .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
    .addContainerGap(250, Short.MAX_VALUE))
    pack();
    }// </editor-fold>
    private void jPasswordField1ActionPerformed(java.awt.event.ActionEvent evt) {
    private void jFormattedTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                                    
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
    Object src=evt.getSource();
    if(src==jButton3)
    dispose();
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
    Object src=evt.getSource();
    if(src==jButton1)
    admin_name=jFormattedTextField1.getText();
    password=jPasswordField1.getText();
    try
    Class.forName("oracle.jdbc.driver.OracleDriver");
    con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcle","scott","root");
    stmt=con.createStatement();
    rs=stmt.executeQuery("select admin_name,password from admin_registration where admin_name='chandana' and password='8989' ");
    while(rs.next())
    if(admin_name.equals(rs.getString(1))&&password.equals(rs.getString(2)))
    admin_registration a=new admin_registration();
    a.setVisible(true);
    dispose();
    else
    JOptionPane.showMessageDialog(null,"Please enter admin name & password ");
    catch(ClassNotFoundException e)
    e.printStackTrace();
    catch(SQLException e)
    e.printStackTrace();
    public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    admin_login_code a=new admin_login_code();
    a.setVisible(true);
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton3;
    private javax.swing.JFormattedTextField jFormattedTextField1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPasswordField jPasswordField1;
    // End of variables declaration
    Can any one can help me how to set a background for jFrame?
    Thank you in advance.
    Edited by: forums.com on Jul 14, 2008 1:40 AM

    90% of the code you posted is not relevant to your question.
    If you want further help post a Short, Self Contained, Compilable and Executable, Example Program (SSCCE) that demonstrates the problem.
    And don't forget to use code tags when posting code.

  • JCombo box focus problem in WinNT/2000

    Hi,
    We have made use of JCombobox component in our application and we have implemented autocomplete feature for that (Written our own logic). For testing we tried to run our application in Windows NT O/S. As and when user types any value in the JCombobox and if ENTER key is pressed or tries to move out by pressing tab key, then the existence of that value is checked in Registry (User profile ? Part of Autocomplete feature). If the same value does not exists, then the value will be stored in the registry. Here our problem is, user is unable to move out of JCombobox and it goes to infinite loop. To come out of the problem, user will have to terminate the application. However, if we comment part of the code i.e. focusLost part which (Setup Method in below pasted code) has logic to put the user entered value into the JCombobox in the same session of panel, then application works with one limitation i.e. user will have to press the tab key twice to move out of JCombobox.
    However, none of the above problem were reported when the application is running in Windows2000 O/S with local admin rights to logon user.
    Is this a bug with Swings? Or a limitation with Windows2000 O/s to run the SWING based application.
    If somebody has any solution, please forward.
    Thanks,
    Regards,
    Raj.
    Code: ===============================================================
    package com.tial.tial.ws.util.autocomplete;
    import com.tial.tial.ws.model.SelectableFieldModel;
    import java.awt.event.FocusAdapter;
    import java.awt.event.FocusEvent;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import javax.swing.ComboBoxEditor;
    import javax.swing.ComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JTextField;
    /** AutoCompleteCombo is used when normal combo Box requires Auto - complete feature.
    * * @version 1.0
    *modified on 26th March, 03 to solve case problem
    *modified on 27th March, 03 to put the user entered value into the combo
    public final class AutoCompleteCombo extends JComboBox{
    private SelectableFieldModel m_myModel;
    private ComboBoxEditor m_myEditor;
    private JTextField m_txtEditor;
    private int SIZEOFSELECTBOX = 20;
    private boolean m_isTextSelected = false;
    /** this is dictionary which has the data from the registry and also those entered by the user in the perticular session.
    protected AutoCompleteDictionary m_dict;
    //Constructors
    /** Constructor for this class. Sets up the dictionary received and listners to the present instance.
    * @param dict the dictionary received from the panel that uses AutoCompleteCombo.
    public AutoCompleteCombo(AutoCompleteDictionary dict, SelectableFieldModel fldModel) {
    super();
    m_myModel = fldModel;
    m_myEditor = super.getEditor();
    m_txtEditor = (JTextField)m_myEditor.getEditorComponent();
    setUp();
    setDictionary(dict);
    public AutoCompleteCombo(AutoCompleteDictionary dict) {
    super();
    m_myModel = null;
    m_myEditor = super.getEditor();
    m_txtEditor = (JTextField)m_myEditor.getEditorComponent();
    setUp();
    setDictionary(dict);
    /** sets the dictionary received from the panel to the instance of AutoCompleteCombo.
    * @param dict dictionary received in the constructor from the panel
    public void setDictionary(AutoCompleteDictionary dict) {
    m_dict = dict;
    /** sets the focus and key listners to the AutoCompleteCombo.
    protected void setUp() {
    m_txtEditor.addFocusListener(new FocusAdapter() {
    //Saves the field value in the dictionary when the focus of the field is lost,
    //this is especially made to take care of commonly used TAB to move frm 1 fld to another.
    // Comment from below to work atleast with pressing tab key twice.
    public void focusLost(FocusEvent e) {
    if(m_dict.size() == SIZEOFSELECTBOX){
    m_dict.removeEntry(m_dict.last().toString());
    m_dict.addEntry(m_txtEditor.getText().toUpperCase());
    //to put the user entered value into the combo in the same session of panel
    if (null != m_myModel) {
    String dictList = m_dict.getElementsList();
    String[] dictArray = dictList.split("~");
    String enteredTxt = m_txtEditor.getText();
    m_myModel.removeAll();
    //so that initially the screen gets displayed with this field blank
    //System.out.println("1 txt----------->" +m_txtEditor.getText());
    m_myModel.addElement("");
    //System.out.println("2 txt----------->" +m_txtEditor.getText());
    for (int i=0; i<dictArray.length; i++) {
    if (dictArray[i] != "" ) {
    m_myModel.addElement(dictArray);
    m_myModel.setSelectedItem(enteredTxt);
    } // Comment till above to work atleast with pressing tab key twice.
    m_txtEditor.addKeyListener( new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
    m_isTextSelected = m_txtEditor.getSelectionStart() != m_txtEditor.getSelectionEnd();
    public void keyReleased(KeyEvent e) {
    char charPressed = e.getKeyChar();
    int charCodePressed = e.getKeyCode();
    if (charPressed == KeyEvent.CHAR_UNDEFINED) {
    return;
    if (charCodePressed == KeyEvent.VK_ENTER) {
    //This is 2 restrict the dictionary lenght 2 the given limit
    //remove this -1 if in SavePreference, def is "" instead of " "
    //if (m_dict.size() - 1 == SIZEOFSELECTBOX) {
    if (m_dict.size() == SIZEOFSELECTBOX) {
    m_dict.removeEntry(m_dict.last().toString());
    m_dict.addEntry(m_txtEditor.getText().toUpperCase());
    //to put the user entered value into the combo in the same session of panel
    if (null != m_myModel) {
    String dictList = m_dict.getElementsList();
    String[] dictArray = dictList.split("~");
    m_myModel.removeAll();
    //so that initially the screen gets displayed with this field blank
    m_myModel.addElement("");
    for (int i=0; i<dictArray.length; i++) {
    if (dictArray[i] != "" ) {
    m_myModel.addElement(dictArray[i]);
    if (charCodePressed == KeyEvent.VK_DELETE) {
    m_dict.removeEntry(m_txtEditor.getText());
    //getSelectionStart() gives 0, as for a moment when Enter is pressed, the entire txt is selected.
    //hence getCaretPosition is used
    // if (m_txtEditor.getSelectionStart() != m_txtEditor.getSelectionEnd() && m_txtEditor.getSelectionEnd() != m_txtEditor.getCaretPosition()) {
    // m_txtEditor.setText(m_txtEditor.getText().substring(0, m_txtEditor.getSelectionStart()));
    if (m_txtEditor.getCaretPosition() != m_txtEditor.getSelectionEnd()) {
    m_txtEditor.setText(m_txtEditor.getText().substring(0, m_txtEditor.getCaretPosition()));
    String input = m_txtEditor.getText();
    if (lookup(input) != null) {
    m_txtEditor.setText(lookup(input));
    m_txtEditor.setSelectionStart(input.length());
    m_txtEditor.setSelectionEnd(m_txtEditor.getText().length());
    m_isTextSelected = true;
    else {
    m_isTextSelected = false;
    if (charCodePressed == KeyEvent.VK_BACK_SPACE
    && m_isTextSelected && input.length() > 0) {
    m_txtEditor.setText(input.substring(0, input.length()));
    /** used to search for the entered string in the dictionary list.
    * @param str the string that is to be searched in the dictionary.
    * @return the string from the dictionary that matches with the received str.
    protected String lookup(String str) {
    if (m_dict != null) {
    return m_dict.lookup(str);
    return null;

    Can you post common part of the stack trace when Java goes into infinite loop?

  • Problem with JTextArea

    Hi all,
    I am having a class which extends JTextArea. I press backspace and I check for some condition in KeyReleased event. If the condition is true I am setting the JTextArea with the old text(retainText). What happens here is that first the backspace entered by me is reflecting on the screen and then only the new text (retainText) is set. This causes a flickering on the text area. My requirement is that this should not happen.
    Is there any way to avoid this .
    or else Is there any way to cancel this event ( say i enter backspace and if the condition becomes true in the KeyReleased event, I should stop this event. Can any body please help me ASAP. Thanks!!!
    I ve attached the code also
    package com.bankofny.iic.client.component;
    import java.awt.*;
    import java.util.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.text.*;
    import com.bankofny.iic.client.instruction.viewer.TradeDetailForm;
    import com.bankofny.iic.common.util.StringFormatter;
    public class IicTextAreaSwift extends JTextArea implements FocusListener, KeyListener
        // IicTextAreaSwift Method
         private int DescCharWidth = 0;
        private int DescCharHeight =0;
         private String retainText; //retain always the latest text
         private int KeyCode;
         private String KeyText="";
        public IicTextAreaSwift(int _rows, int _columns, boolean scrollPane)
            super(_rows, _columns + 1);
            setDisabledTextColor(Color.gray);
                rows            = _rows;
            columns         = _columns;
            setRows(_rows);
            maxTextAllowed  = _rows * _columns;
            setBorder(new BevelBorder(BevelBorder.LOWERED));
            setLineWrap(true);
            setWrapStyleWord(true);
            Font fixedFont = new Font("Courier", Font.PLAIN, 12);
            setFont(fixedFont);
            FontMetrics fm = getFontMetrics(fixedFont);
            DescCharWidth = fm.charWidth('W') * (_columns + 1);
          //  DescCharHeight = fm.getHeight() * 4 ;
               DescCharHeight =  DEFAULT_LABEL_HEIGHT * 3;
            setPreferredSize(new Dimension(DescCharWidth, DescCharHeight));
            // setSize(new Dimension(DescCharWidth, DescCharHeight));
            addKeyListener(this);
            addFocusListener(this);
            fixTAB();
        public IicTextAreaSwift(int _rows, int _columns)
              super(_rows, _columns);
              // HA this constructor is for this field not in a scroll pane
              setDisabledTextColor(Color.gray);
              rows            = _rows;
              columns         = _columns;
              setRows(_rows);
              maxTextAllowed  = _rows * _columns;
              setBorder(new BevelBorder(BevelBorder.LOWERED));
              setLineWrap(true);
              setWrapStyleWord(true);
              Font fixedFont = new Font("Courier", Font.PLAIN, 12);
              setFont(fixedFont);
              FontMetrics fm = getFontMetrics(fixedFont);
              DescCharWidth = fm.charWidth('W') * (_columns + 1);
             //  DescCharHeight = fm.getHeight() * 4 ;
              DescCharHeight =  DEFAULT_LABEL_HEIGHT * 3;
              setPreferredSize(new Dimension(DescCharWidth, DescCharHeight));
              // setSize(new Dimension(DescCharWidth, DescCharHeight));
              addKeyListener(this);
              addFocusListener(this);
              fixTAB();
        public Dimension getDimen()
              return new Dimension(     DescCharWidth, DescCharHeight);
         public void showKeys(JComponent component)
              // List keystrokes in the WHEN_FOCUSED input map of the component
              InputMap map = component.getInputMap(JComponent.WHEN_FOCUSED);
              printInputMap(map,"WHEN_FOCUSED");
              // List keystrokes in the WHEN_ANCESTOR_OF_FOCUSED_COMPONENT input map of the component
              map = component.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
              printInputMap(map,"WHEN_ANCESTOR_OF_FOCUSED_COMPONENT");
              //list(map, map.keys());
              // List keystrokes in all related input maps
              //list(map, map.allKeys());
              // List keystrokes in the WHEN_IN_FOCUSED_WINDOW input map of the component
              map = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
              printInputMap(map,"WHEN_IN_FOCUSED_WINDOW");
              printActionMap( getActionMap() , "JTextArea");
              //list(map, map.keys());
              // List keystrokes in all related input maps
            // list(map, map.allKeys());
         public void fixTAB()
              Set newForwardKeys = new HashSet ();
              newForwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0, false));
              this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, newForwardKeys);
              Set newBackwardKeys = new HashSet ();
              newBackwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK, false));
              this.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, newBackwardKeys);
              Set forwardKeys = this.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
    //          System.out.println ("Desktop forward focus traversal keys: " + forwardKeys);
              Set backwardKeys = this.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
    //          System.out.println ("Desktop backward focus traversal keys: " + backwardKeys);
             this.setFocusTraversalKeysEnabled(true);
         public static void printActionMap(ActionMap actionMap, String who)
         {     //     System.out.println("Action map for " + who + ":");
              Object[] keys = actionMap.allKeys();
              if (keys != null)
                   for (int i = 0; i < keys.length; i++)
                        Object key = keys;
                        Action targetAction = actionMap.get(key);
                   //     System.out.println("\tName: <" + key + ">, action: " + targetAction.getClass().getName());
         public static void printInputMap(InputMap inputMap, String heading)
              //System.out.println("\n" + heading + ":");
              KeyStroke[] keys = inputMap.allKeys();
              if (keys != null)
                   for (int i = 0; i < keys.length; i++)
                        KeyStroke key = keys[i];
                        Object actionName = inputMap.get(key);
                   //     System.out.println("\tKey: <" + key + ">, action name: " + actionName);
    public void paste()
    public void focusGained(java.awt.event.FocusEvent event)
              //System.out.println("Hman " + event.paramString());
         if(event.getOppositeComponent() != null)
              if(event.getOppositeComponent().getParent() != null)
                   if (findRoot(event.getOppositeComponent()) != null && findRoot(this) != null)
                        if ( isEnabled() && findRoot(event.getOppositeComponent()) == findRoot(this))
                        selectAll();
         public Component findRoot(Component _cc)
              while (_cc.getParent() != null)
                   cc = cc.getParent();
                   //System.out.println("Parent:" + _cc);
                   if (_cc instanceof TradeDetailForm)
                   return _cc;
              return null;
    public void focusLost(java.awt.event.FocusEvent event)
         Begin Nirmal 1: Requirements 3.1 issues.
         To fix: getValue() method never returns more than the rows.
         New method added to ensure user entered text never goes beyond Rows
    * Method to ensure the getValue() never returns more than the rows.
    * will return -1 if the rows are out of range
    * @param KeyEvent
    * @return int
    public int ensureNotBeyondRows(KeyEvent e)
              String[] s = getValue();
              if (s==null)
                   return 0;
              if (s.length>rows)
                   setText(retainText);
                   return -1;
              String str=getText();
              insert(e.getKeyChar()+"", getCaretPosition());
              s = getValue();
              setText(str);
              if (s.length>rows)
                   setText(retainText);
                   return -1;
              return 0;
         End Nirmal 1:
    // main Method
    // processComponentKeyEvent Method
    public void keyTyped(KeyEvent e)
         /* Naga */
              System.out.println("inside keyTyped");
              System.out.println("e.getKeyChar() " + KeyEvent.getKeyText(e.getKeyCode()));
         /*try
                   java.lang.Thread.sleep(2000);
              catch(InterruptedException ie)
         try {
    int curPos2 = getCaretPosition();
    int curLine2 = getLineOfOffset(curPos2);
    //System.out.println( "curline:" + curLine2 + " of " + rows);
    char[] tmp = {e.getKeyChar()};
    int curPos1 = getCaretPosition();
    int line1 = getLineOfOffset(curPos1) ;
    int startOfLine = getLineStartOffset(line1) ;
    if( curPos1 == startOfLine && line1 > 0)
    if ((tmp[0] == ':') || (tmp[0] == '-' )){
    // System.out.println("hman3");
    e.consume();
    return;
                   Begin Nirmal 2: Requirements 3.1 issues.
                   To fix: getValue() method never returns more than the rows.
                   New method added to ensure user entered text never goes beyond Rows
                   if (!isArrowKey(e) &&
                        (e.paramString().indexOf("Enter") == -1 ) &&
                        !isBackspaceKey(e)) {
                             int maxLimitFlg=ensureNotBeyondRows(e);
                             setCaretPosition(curPos2);
                             if (maxLimitFlg == -1)
                                  e.consume();
                                  return;
                   End Nirmal 2:
    // System.out.println("e.paramString()" + e.paramString());
    // System.out.println("place 2 " + e.paramString());
    if (!(StringFormatter.isValidSwift(tmp[0])) && !(functionKey(e)) && notMoveForward(e))
    // System.out.println("hman2 isaction" + e.isActionKey());
    // System.out.println("KeyTyped" + e.getKeyChar()+ e.getKeyText(e.getKeyCode()) + "/keycode" + e.getKeyCode() + "/modifiers" + e.getModifiers() );
    e.consume();
    return;
    int curPosInLine = -1;
    int firstPos = -1;
    if (getText().length() < maxTextAllowed ||
    (KeyCode == KeyEvent.VK_UP || KeyCode == KeyEvent.VK_BACK_SPACE))
    int curPos = getCaretPosition();
    if (!(functionKey(e)))
    e.setKeyChar( (new String( tmp ).toUpperCase()).toCharArray()[0]);
    curPos2 = getCaretPosition();
    curLine2 = getLineOfOffset(curPos2);
    //System.out.println( "curline:" + curLine2 + " of " + rows);
    if (curLine2 + 1 >= rows &&
    (KeyCode == KeyEvent.VK_ENTER ||
    KeyCode == KeyEvent.VK_DOWN) )
    // System.out.println("hman1");
    e.consume();
    return;
    else {
    String oldText = getText();
    // super.processKeyEvent(e);
    if (getNumberOfLines(getLineCount()) == -1 && !(functionKey(e)))
    setText(oldText);
    invalidate();
    setCaretPosition(curPos);
    } } catch (javax.swing.text.BadLocationException evt) {
    System.out.println("Bad Location Exception in processKeyEvent");
    public void keyPressed(KeyEvent e){
              //System.out.println("keyPressed" + e.getKeyCode()+ e.getKeyText(e.getKeyCode()));
                   retainText = getText();//retain always the latest text
                   /* Naga */
                   //System.out.println("retainText " + retainText);
                   System.out.println("inside keyPressed");
                   System.out.println("e.getKeyChar() " + KeyEvent.getKeyText(e.getKeyCode()));
                   /*try
                        java.lang.Thread.sleep(2000);
                   catch(InterruptedException ie)
    public void keyReleased(KeyEvent e){
              //System.out.println( "keyReleased" + e.getKeyCode()+ e.getKeyText(e.getKeyCode()));
         String []s = getValue();
         /* Naga */
         System.out.println(" inside keyReleased");
         System.out.println("e.getKeyChar() " + KeyEvent.getKeyText(e.getKeyCode()));
         /*try
              java.lang.Thread.sleep(2000);
         catch(InterruptedException ie)
              /*try
                   System.out.println("s " + s[0]);
                   System.out.println("s " + s[1]);
                   System.out.println("s " + s[2]);
                   System.out.println("s " + s[3]);
              catch(Exception e1)
              //System.out.println("s.length " + s.length);
              //System.out.println("rows " + rows);
              if (s!=null && s.length>rows)
                   System.out.println("setting text");
                   //setText(retainText);
                   invalidate();
         public boolean isTab(KeyEvent e)
              if (e.paramString().indexOf("keyChar=Tab") == -1)
              return false;
              } else
                   return true;
         public boolean keepProcessing(java.awt.event.KeyEvent e)
              if (e.paramString().indexOf("keyChar=Backspace") != -1 ) { return true; }
              if (e.paramString().indexOf("keyChar=Left") != -1 ) { return true; }
              if (e.paramString().indexOf("keyChar=Down") != -1 ) { return true; }
              if (e.paramString().indexOf("keyChar=Up") != -1 ) { return true; }
              if (e.paramString().indexOf("keyChar=Delete") != -1 ) { return true; }
              if (e.paramString().indexOf("keyChar=Right") != -1 ) { return true; }
              return false;
         public boolean isArrowKey(java.awt.event.KeyEvent e)
              if (e.paramString().indexOf("Left") != -1 ||
                   e.paramString().indexOf("Down") != -1 ||
                   e.paramString().indexOf("Up") != -1 ||
                   e.paramString().indexOf("Right") != -1 )
                   return true;
              return false;
         public boolean isBackspaceKey(java.awt.event.KeyEvent e)
              if (e.paramString().indexOf("Backspace") != -1)
                   return true;
              return false;
         public boolean isDeleteKey(java.awt.event.KeyEvent e)
              if (e.paramString().indexOf("Delete") != -1)
                   return true;
              return false;
    public boolean notMoveForward(java.awt.event.KeyEvent e)
              if (e.paramString().indexOf("Backspace") == -1 &&
              e.paramString().indexOf("Left") == -1 &&
              // e.paramString().indexOf("keyText=Down") == -1 &&
              e.paramString().indexOf("Up") == -1 &&
              e.paramString().indexOf("Delete") == -1 ) { return true; }
              return false;
    // processKeyEvent Method
    public void processKeyEvent(java.awt.event.KeyEvent e)
    //     System.out.println( "processKeyEvent");
         /* Naga */
         System.out.println(" inside processKeyEvent");
         System.out.println("e.getKeyChar() " + KeyEvent.getKeyText(e.getKeyCode()));
                   if (e.paramString().indexOf("KEY_PRESSED") != -1) {
                        KeyText=e.paramString();
                   } else {
                        KeyText="";
                   KeyCode=e.getKeyCode();
    int filledRows = (getText().length()-1)/columns + 1;
    if (KeyCode == KeyEvent.VK_ENTER && filledRows >= rows)
    return;
    try {
                   if (isArrowKey(e) || isBackspaceKey(e) || isDeleteKey(e)) {
                        super.processKeyEvent(e);
                        return;
    int curPos2 = getCaretPosition();
    int curLine2 = getLineOfOffset(curPos2);
    // System.out.println( "curline:" + curLine2 + " of " + rows);
    if (curLine2 + 1 >= rows &&
    (KeyCode == KeyEvent.VK_ENTER ||
    KeyCode == KeyEvent.VK_DOWN) )
                             //System.out.println("hman5");
    e.consume();
    return;
    int curPosInLine = -1;
    int firstPos = -1;
    if (getText().length() < maxTextAllowed)
    int curPos = getCaretPosition();
    curPos2 = getCaretPosition();
    curLine2 = getLineOfOffset(curPos2);
    int curlinepos = getLineStartOffset(curLine2) ;
                   if ( (curLine2 + 1 == rows) && (curPos2 - curlinepos >= getColumns() - 1) && notMoveForward(e))
                        e.consume();
    return;
    if ((curLine2 + 1 >= rows &&
    (KeyCode == KeyEvent.VK_ENTER ||
    KeyCode == KeyEvent.VK_DOWN) ))
    // System.out.println("hman6");
    e.consume();
    return;
    } else {
    String oldText = getText();
    // System.out.println("hman7");
    super.processKeyEvent(e);
    if (getNumberOfLines(getLineCount()) == -1 && !(functionKey(e)))
    // System.out.println("hman8");
    setText(oldText);
    invalidate();
    setCaretPosition(curPos);
    } } catch (javax.swing.text.BadLocationException evt) {
    System.out.println("Bad Location Exception in processKeyEvent");
    // processFunctionalKeys Method
    public boolean processFunctionalKeys(java.awt.event.KeyEvent e)
    // System.out.println( "processFunctionalKeys");
    if (KeyCode == KeyEvent.VK_BACK_SPACE ||
    KeyCode == KeyEvent.VK_ESCAPE ||
    KeyCode == KeyEvent.VK_PAGE_UP ||
    KeyCode == KeyEvent.VK_PAGE_DOWN ||
    KeyCode == KeyEvent.VK_END ||
    KeyCode == KeyEvent.VK_HOME ||
    KeyCode == KeyEvent.VK_LEFT ||
    KeyCode == KeyEvent.VK_UP ||
    KeyCode == KeyEvent.VK_RIGHT ||
    KeyCode == KeyEvent.VK_DOWN ||
    KeyCode == KeyEvent.VK_DELETE
    //System.out.println("Process the KEY getkey:" + e.getKeyChar() + "/getcode:" + e.getKeyCode());
    super.processKeyEvent(e);
    return true;
    else
    return false;
    public boolean functionKey(java.awt.event.KeyEvent e)
    // System.out.println( "functionKey");
    if (KeyCode == KeyEvent.VK_BACK_SPACE ||
    KeyCode == KeyEvent.VK_ESCAPE ||
    KeyCode == KeyEvent.VK_PAGE_UP ||
    KeyCode == KeyEvent.VK_PAGE_DOWN ||
    KeyCode == KeyEvent.VK_END ||
    KeyCode == KeyEvent.VK_HOME ||
    KeyCode == KeyEvent.VK_LEFT ||
    KeyCode == KeyEvent.VK_UP ||
    KeyCode == KeyEvent.VK_RIGHT ||
    KeyCode == KeyEvent.VK_DOWN ||
    KeyCode == KeyEvent.VK_DELETE
    //System.out.println("Process the KEY getkey:" + e.getKeyChar() + "/getcode:" + e.getKeyCode());
    //super.processKeyEvent(e);
    return true;
    else
    return false;
    // getLineCount Method - Returns -1 if number of lines is not between 1 to 4.
    /* This method return -1 if number of lines is not between 1 to 4.
    Pass in getLineCount() to get number of lines for all elements.
    JTextArea separates elements by new line character.
    BnyTextArea treats each row as a line.
    public int getNumberOfLines(int elementCount)
    int lineCount = 0;
    int startPos = 0;
    int endPos = 0;
    for (int i = 0; i <= elementCount - 1; i++) {
    lineCount = lineCount + getLineCountOfElement(i);
    if (lineCount == -1 || lineCount > rows) {
    lineCount = -1;
    break;
    return lineCount;
    // getSpacePos Method - this method finds the first position of space found.
    public int getSpacePos(int pos)
              Begin Nirmal 3: Requirements 3.1 issues.
              Modified the end limit from 0 to pos-columns,
              so that to avoid the return index value from previous lines
              int endLimit=pos-columns;
              if (endLimit<0) {
                   endLimit=pos;
    for (int i = pos; i > endLimit; i--) {
    if (getText().charAt(i) == ' ' || getText().charAt(i) == '\n') { // 11/14/03 Eaten treat \n as space
                        return i;
    return -1;
              End Nirmal 3:
    // getLineCountOfElement Method - returns -1 if number of lines is not between 1 to 4.
    public int getLineCountOfElement(int line)
    int lineCount = 1;
    try {
    int startPos = getLineStartOffset(line) ;
    int endPos = getLineEndOffset(line) ;
    if (moreThanNumOfColumns(startPos, endPos)) {
    lineCount = 2;
    startPos = getSpacePos(startPos+columns);
    if (startPos != -1 && moreThanNumOfColumns(startPos+1,endPos)) {
    lineCount = 3;
    startPos = getSpacePos(startPos+columns);
    if (startPos != -1 && moreThanNumOfColumns(startPos+1,endPos)) {
    lineCount = 4;
    startPos = getSpacePos(startPos+columns);
    if (startPos != -1 && moreThanNumOfColumns(startPos+1,endPos)) {
    return -1;
    } catch (javax.swing.text.BadLocationException e) {
    System.out.println("Bad Location Exception in getLineCountOfElement");
    return lineCount;
    // moreThanNumOfColumns Method
    public boolean moreThanNumOfColumns(int startPos, int endPos)
    if ((endPos - startPos) > (columns + 1))
    return true;
    else
    return false;
    // getNewLineCount Method
    public int getNewLineCount()
    int count = 0;
    boolean rc = true;
    int pos = getText().indexOf(KeyEvent.VK_ENTER, 0);
    if (pos == -1)
    rc = false;
    else
    count++;
    while (rc) {
    pos = getText().indexOf(KeyEvent.VK_ENTER, pos+1);
    if (pos == -1)
    rc = false;
    else
    count++;
    return count;
    // getValue Method
    public String[] getValue()
    // System.out.println(getText());
    int lines = getLineCount();
    int spacePos = 0;
    String str = new String();
    Vector strings = new Vector();
    boolean newLine=true;
    /*Nirmal : this boolean is to add the empty only in new line.
    To avoid those lines which end with \n
    if (getDocument().getLength() > 0) {
    for (int i = 0; i < lines; i++) {
                        newLine=true;
    try {
    int startPos = getLineStartOffset(i) ;
    int endPos = getLineEndOffset(i) + 1;
    /* Naga */
    //System.out.println("startPos " + startPos);
    //System.out.println("endPos " + endPos);
    //System.out.println(i + "HHMAN startPos = " + getLineStartOffset(i));
    //System.out.println(i + "HHMAN endPos = " + getLineEndOffset(i));
    while (moreThanNumOfColumns(startPos,endPos)) {
                                  newLine=false;
    int tempEndPos = 0;
    tempEndPos = startPos + columns;
    System.out.println("tempEndPos " + tempEndPos + " columns " + columns);
    spacePos = getSpacePos(tempEndPos);
    if (spacePos == -1) {
    if (startPos >= getDocument().getLength())
    break;
    else {
    if (tempEndPos >= getDocument().getLength())
    spacePos = getDocument().getLength();
    else {
    spacePos = startPos + columns;
    str = getText().substring(startPos,spacePos);
    if (!(str.trim().equals(""))) {
                                       strings.addElement(str.trim());
    startPos = spacePos;
                             if (startPos < endPos) {
         str = getText().substring(startPos,endPos - 1).trim();
         if(str!=null) {
              if(str.trim().length()>0) {
                                            strings.addElement(str);
                                            continue;
                                       } else {
                                            if(newLine) {
                                                 strings.addElement(str);
    /*Nirmal commented the below lines to fix existing issue
    of adding even empty lines entered in textbox */
    //if ((str==null) || (str.length()==0)) continue;
    //if (!(str.trim().equals(""))) strings.addElement(str);
    } catch (javax.swing.text.BadLocationException e) {
    System.out.println("Bad Location Exception in getValue");
    String[] strs = new String[strings.size()];
    strings.copyInto(strs);
    return strs;
    } else
    return null;
         public void clear() {
    setText("");
    // invalidate();
    // repaint();
    // fixTAB();
    public int getColumnsX()
    if (columnLimits != null)
    int curPos = getCaretPosition();
    //System.out.println("getCaretPosition()" + curPos);
    if (curPos > 0)
    for (int i = 0;i < columnLimits.length;i++)
    curPos = curPos - columnLimits[i];
    if (curPos < 1)
    //System.out.println("getNumberOfLines(curElem)" + i);
    return columnLimits[i];
    } else
    return columns;
    return 0;
         public void setRowLimitX(int rows,int columns)
    maxTextAllowed = rows * columns;
    setRows(_rows);
    rows = _rows;
    columns = _columns;
    setFont(fixedFont);
    setBorder(new BevelBorder(BevelBorder.LOWERED));
    setLineWrap(true);
    setWrapStyleWord(true);
    Font fixedFont = new Font("Courier", Font.PLAIN, 12);
    FontMetrics fm = getFontMetrics(fixedFont);
    int width = fm.charWidth('W') * (35 + 1);
    int height = DEFAULT_LABEL_HEIGHT * 3 ;
    setPreferredSize(new Dimension(width, height));
    public void setEditable(boolean editable)
    super.setEditable(editable);
    super.setEnabled(editable);
    setFocusable(editable);
    if (editable)
    setForeground(Color.black);
    else
    setForeground(Color.gray);
    fixTAB();
    // add your data members here
    // add your data members here
    private int rows = 0;
    private int columns = 0;
    private int[] columnLimits = null;
    private int maxTextAllowed = 0;
    private Font fixedFont = new Font("Courier", Font.PLAIN, 12);
    public final static int LEFT_LABEL_WIDTH = 100;
         public final static int DEFAULT_LABEL_HEIGHT = 20;

    You posted way too much code. 90% of the code is not related to the "backspace" problem. We want compileable and executable code, but only that code that is relevant to the problem.
    Anyway, instead of handling KeyEvents you should read the Swing tutorial on [url http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html]How to Use Key Bindings for the recommended approach.
    Also you may want to check out this posting which has some information on the backspace KeyStroke:
    http://forum.java.sun.com/thread.jspa?forumID=57&threadID=566748

  • How can i limit the user to enter only A to Z and space in JFormattedText

    dear
    i want to use JFormatedTextField in two manners
    1.Limit the no of charecters.means in a text field only 20 charecters r allowed.
    2.and also check the enterd charecter must be a to z and space not other chareters r allowed.
    3.same for numbers means 0 to 9 and decimal.
    how can i do by using the JFormated TextFilef.

    Probably lacks in some cases but what the hell.
    * Filename:           JSMaskedTextField.java
    * Creation date:      22-mei-2004
    * Author:                Kevin Pors
    package jsupport.swingext;
    import java.awt.event.KeyEvent;
    import java.util.Arrays;
    import javax.swing.JTextField;
    * A masked textfield is a textfield which allows only a specific mask of
    * characters to be typed. If characters typed do not occur in the mask
    * provided, the typed character will not be 'written' at all. The default mask
    * for this <code>JSMaskedTextField</code> is <code>MASK_ALPHA_NUMERIC</code>
    * @author Kevin Pors
    * @version 1.32
    public class JSMaskedTextField extends JTextField {
        /** Masking for alphabetical lowercase characters only. */
        public static final String MASK_ALPHA_LCASE = "abcdefghijklmnopqrstuvwxyz ";
        /** Masking for alpha-numeric characters (lcase/ucase) only. */
        public static final String MASK_ALPHA_NUMERIC = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ";
        /** Masking for alphabetical uppercase characters only. */
        public static final String MASK_ALPHA_UCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
        /** Masking for numbers only. */
        public static final String MASK_NUMERIC = "0123456789";
        /** Masking for hexadecimals. */
        public static final String MASK_HEXADECIMAL = "0123456789ABCDEF";
         * An array of keyevent constants defining which keys are always to be
         * allowed, no matter what.
        private final int[] ALWAYS_ALLOWED = new int[] { KeyEvent.VK_BACK_SPACE,
                KeyEvent.VK_DELETE, KeyEvent.VK_UP, KeyEvent.VK_DOWN,
                KeyEvent.VK_LEFT, KeyEvent.VK_RIGHT, KeyEvent.VK_SHIFT,
                KeyEvent.VK_HOME, KeyEvent.VK_END};
        /** Boolean specifying whether casing should be ignored. */
        private boolean ignoringCase = true;
        /** Specifying whether the maskin is enabled */
        private boolean isMaskingEnabled = true;
        /** The mask for the textfield. */
        private String mask = MASK_ALPHA_NUMERIC;
         * Creates a default number field.
        public JSMaskedTextField() {
            super(null, null, 0);
            Arrays.sort(ALWAYS_ALLOWED);
         * Creates a number field, with a specified number of columns.
         * @param columns The columnnumber.
        public JSMaskedTextField(int columns) {
            super(null, null, columns);
            Arrays.sort(ALWAYS_ALLOWED);
         * Creates a JSMaskedTextField with a masking.
         * @param mask The masking to be used.
        public JSMaskedTextField(String mask) {
            super(null, null, 0);
            Arrays.sort(ALWAYS_ALLOWED);
            setMask(mask);
         * Gets the masking for this masked textfield.
         * @return Returns the mask.
        public String getMask() {
            return this.mask;
         * Gets whether this JSMaskedTextField should be ignoring casing.
         * @return Returns if the component should be ignoring casing.
        public boolean isIgnoringCase() {
            return this.ignoringCase;
         * Checks whether masking is enabled. Default should be true.
         * @return Returns true if masking is enabled, false if not.
        public boolean isMaskingEnabled() {
            return this.isMaskingEnabled;
         * Sets whether it should be ignoring casing when checking for alpha-chars.
         * @param ignoringCase The ignoringCase to set.
        public void setIgnoringCase(boolean ignoringCase) {
            this.ignoringCase = ignoringCase;
         * Sets the masking for this textfield. The masking will determine which
         * characters can be typed. If the characters in de <code>mask</code> do
         * not occur in the typed character, it won't be typed.
         * @param mask The mask to set.
        public void setMask(String mask) {
            this.mask = mask;
         * Sets the masking enabled. If <code>false</code> this component will
         * behave just like a normal textfield.
         * @param isMaskingEnabled true if masking should be enabled.
        public void setMaskingEnabled(boolean isMaskingEnabled) {
            this.isMaskingEnabled = isMaskingEnabled;
         * Sets text of this textfield. If the blah blah.
         * @see javax.swing.text.JTextComponent#setText(java.lang.String)
        public void setText(String text) {
            for (int i = 0; i < text.length(); i++) {
                if (getMask().indexOf(text.charAt(i)) < 0) { // does not occur
                    return;
            super.setText(text);
         * @see javax.swing.JComponent#processKeyEvent(java.awt.event.KeyEvent)
        protected void processKeyEvent(KeyEvent e) {
            if (!isMaskingEnabled()) {
                return;
            char typed = e.getKeyChar();
            int code = e.getKeyCode();
            for (int i = 0; i < ALWAYS_ALLOWED.length; i++) {
                if (ALWAYS_ALLOWED[i] == code) {
                    super.processKeyEvent(e);
                    return;
            if (typed == KeyEvent.VK_BACK_SPACE) {
                super.processKeyEvent(e);
            if (isIgnoringCase()) {
                String tString = new String(typed + "");
                String ucase = tString.toUpperCase();
                String lcase = tString.toLowerCase();
                if (getMask().indexOf(ucase) < 0 || getMask().indexOf(lcase) < 0) {
                    e.consume();
                } else {
                    super.processKeyEvent(e);
                    return;
            } else { // not ignoring casing
                if (getMask().indexOf(typed) < 0) {
                    e.consume();
                } else {
                    super.processKeyEvent(e);
    }

  • How to consume key events

    I would like to create a subclass of TextBox that only allows numeric input. My idea was to provide my own onKeyType() handler and consume any key events that do not correspond to digits. However, I can't find any way to consume key events from further processing. How do I do this?
    Are there any other suggestions how to accomplish the task of providing your own filter concerning valid key input?
    /Bengt

    I also wanted a kind of validators for the TextBox class of JavaFX. So I've tried solving the problem using the SwingTextField class and some Java APIs. The following is my code for a SwingTextField accepting only digits, but I do want it to be much simpler.
    import java.awt.AWTEvent;
    import java.awt.event.AWTEventListener;
    import java.awt.event.KeyEvent;
    import java.awt.Toolkit;
    import javafx.ext.swing.SwingTextField;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    import javax.swing.JComponent;
    class DigitKeyEventHookListener extends AWTEventListener {
        public-init var  source:JComponent;
        public  override function  eventDispatched( event:AWTEvent):Void {
            if (event.getSource().equals(source)) {
                var keyEvent : KeyEvent = event as KeyEvent;
                var keyCharacter = keyEvent.getKeyChar();
                var isDigit = false;
                var code = keyEvent.getKeyCode();
               if ((KeyEvent.VK_0 <= keyCharacter) and (keyCharacter <= KeyEvent.VK_9)) {
                       isDigit = true;
                if ((code ==KeyEvent.VK_DELETE) or (code ==KeyEvent.VK_BACK_SPACE)) {
                    isDigit = true;
                if ((code ==KeyEvent.VK_LEFT) or (code ==KeyEvent.VK_RIGHT)) {
                    isDigit = true;
               if (not isDigit) {
                    keyEvent.consume();
    function createSwingTextField() : SwingTextField{
        var field = SwingTextField {
            columns:12
        var listener =  DigitKeyEventHookListener{
            source: field.getJTextField()
        Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);
        return field;
    Stage {
        title: "Digit Box"
        width: 200
        height: 80
        scene: Scene {
            content: createSwingTextField()
    }

  • JTable Deletions

    I am using JTable to display a series of simple text strings. Every cell contains the same kind of data; it isn't querying a database or anything like that. The user must be able to delete these cells quickly, so the design of the application is such that the delete key can be pressed several times in succession to delete successive elements. I am using the standard construct to accomplish this:
    if (keyEvent.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) {...}
    This is a 2 year old app that has run fine in production under JDK 1.1.8. However, when moving to 1.3.1, pressing the delete key causes the currently selected element only to be deleted. While the table updates correctly and the next element is highlighted, nothing happens upon subsequent presses of DELETE. If a cursor key or the mouse is used to select an element -- even the currently highlighted one -- then that element may be deleted, but the cycle repeats itself.
    After combing the JDK docs, Sun's tutorials, and the Forums, I am at a loss. I've tried using editCellAt(), setEditingColumn/Row(), clearSelection(), & changeSelection() after firing the deletion event. Any ideas?

    OK, here's a complete example. Why don't you see what you can do with it?
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    public class TableTest implements KeyListener, TableModel
        public TableTest()
            tableData.add(new String[] { "a", "aa", "aaa", "aaaa" });
            tableData.add(new String[] { "b", "bb", "bbb", "bbbb" });
            tableData.add(new String[] { "c", "cc", "ccc", "cccc" });
            tableData.add(new String[] { "d", "dd", "ddd", "dddd" });
            table = new JTable(this);
            table.addKeyListener(this);
        String columnHeader[] = { " ", "Name", "Type", "Node" };
        JTable table;
        Vector tableData = new Vector();
        Vector tableModelListeners = new Vector();
        // TableModel methods.
        public void addTableModelListener(TableModelListener listener)
            synchronized (tableModelListeners)
                if (!tableModelListeners.contains(listener))
                    tableModelListeners.add(listener);
        public void removeTableModelListener(TableModelListener listener)
            synchronized (tableModelListeners)
                tableModelListeners.remove(listener);
        public Class getColumnClass(int column) { return ((Object[]) tableData.elementAt(0))[column].getClass(); }
        public String getColumnName(int column) { return columnHeader[column]; }
        public int getColumnCount() { return columnHeader.length; }
        public int getRowCount() { return tableData.size(); }
        public Object getValueAt(int r, int c) { return ((Object[]) tableData.elementAt(r))[c]; }
        public void setValueAt(Object value, int r, int c) { ((Object[]) tableData.elementAt(r))[c] = value; }
        public boolean isCellEditable(int r, int c) { return false; }
        private void tableChanged()
            TableModelEvent event = new TableModelEvent(this);
            synchronized (tableModelListeners)
                for (int count = tableModelListeners.size(), i = 0; i < count; i++)
                    ((TableModelListener) tableModelListeners.elementAt(i)).tableChanged(event);
        // KeyListener methods.
        public void keyPressed(KeyEvent ev) { }
        public void keyTyped(KeyEvent ev) { }
        public void keyReleased(KeyEvent ev)
            if (ev.getKeyCode() == KeyEvent.VK_DELETE)
                int row = table.getSelectedRow();
                if (row != -1)
                    tableData.remove(row);
                    tableChanged();
                    if (row < table.getRowCount()) table.setRowSelectionInterval(row, row);
        public static void main(String[] arg)
            TableTest test = new TableTest();
            JFrame frame = new JFrame("Table Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(400, 300);
            frame.setLocation(200, 200);
            frame.getContentPane().add(new JScrollPane(test.table));
            frame.show();

  • Unexplainable behaviour shown by textArea

    unexplainable behaviour shown by textArea . can some one explain the strange behaviour. I have built a JTextArea where is some text in it and the users can enter only " in it and delete only " leave the rest of the original intact . But there is a strange problem when start selecting the text using the mouse and pressing delete key Simultaneously the text i tend to protect is also deleting. I want to know why is this happing. I have attched the code for your referance
    import java.awt.BorderLayout;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextArea;
    import javax.swing.KeyStroke;
    public class KeyBoardINputTest extends JPanel {
      public KeyBoardINputTest(){
         setLayout(new BorderLayout());
         buildGUI();
      private void buildGUI() {
         JTextArea myTA=new JTextArea() {           
           public boolean processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed) {           
              if (e.getKeyChar() == '"') {                
                return super.processKeyBinding(ks, e, condition, pressed);                
              } else if (ks == KeyStroke.getKeyStroke(KeyEvent.VK_HOME, 0)) {
                return super.processKeyBinding(ks, e, condition, pressed);
              } else if (ks == KeyStroke.getKeyStroke(KeyEvent.VK_END, 0)) {
                return super.processKeyBinding(ks, e, condition, pressed);
              } else if (ks == KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)) {
                return super.processKeyBinding(ks, e, condition, pressed);
              } else if (ks == KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0)) {
                return super.processKeyBinding(ks, e, condition, pressed);
              } else if (ks == KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)) {
                return super.processKeyBinding(ks, e, condition, pressed);
              } else if (ks == KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0)) {
                return super.processKeyBinding(ks, e, condition, pressed);
              } else {
                return true;
         myTA.setText("JLBHJKBNSJKBNJKSDNB");
         myTA.addKeyListener(new KeyListener() {
           public void keyPressed(KeyEvent e) {
              JTextArea textArea = (JTextArea) e.getSource();
              if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
                int caretPos = textArea.getCaretPosition();
                String text = textArea.getText();
                if (text.length() > (caretPos - 1) && caretPos != 0) {
                if (caretPos - 1 != -1) {
                     if (text.charAt(caretPos - 1) != '"') {
                        e.consume();
              } else if (e.getKeyCode() == KeyEvent.VK_DELETE) {
                int caretPos = textArea.getCaretPosition();
                String text = textArea.getText();
                if (text.length() > caretPos ) {
                   if (text.charAt(caretPos) != '"') {
                     e.consume();
           public void keyReleased(KeyEvent e) { }
           public void keyTyped(KeyEvent e) { }           
         add(myTA,BorderLayout.CENTER);
      public static void main(String args[]) {
         JFrame frm = new JFrame();
         frm.setSize(450,300);
         frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frm.getContentPane().add(new KeyBoardINputTest());
         frm.setVisible(true);
    {code}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    I fixed the problem by using my keyListener itself
    myTA.addKeyListener(new KeyListener() {
           public void keyPressed(KeyEvent e) {
              JTextArea textArea = (JTextArea) e.getSource();     
              if (textArea.getSelectionStart() == textArea.getSelectionEnd()) {
                if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
                   int caretPos = textArea.getCaretPosition();
                   String text = textArea.getText();
                   if (text.length() > (caretPos - 1) && caretPos != 0) {
                     if (caretPos - 1 != -1) {
                        if (text.charAt(caretPos - 1) != '"') {
                          e.consume();
                } else if (e.getKeyCode() == KeyEvent.VK_DELETE) {
                int caretPos = textArea.getCaretPosition();
                   String text = textArea.getText();
                   if (text.length() > caretPos) {
                     if (text.charAt(caretPos) != '"') {
                        e.consume();
              } else {
                e.consume();
           }

Maybe you are looking for