java - How can I modify the behavior of the tab key in a JTextArea? -


i'm creating form in java swing, , 1 of fields jtextarea. when use tab key on other fields, gives focus next widget, in jtextarea, inserts tab character (horizontal space) in text.

how can modify behavior?

/*     understanding of how tabbing works. focus manager     recognizes following default keystrokes tabbing:      forwards:  tab or ctrl-tab     backwards: shift-tab or ctrl-shift-tab      in case of jtextarea, tab , shift-tab have been removed     defaults means keystroke passed text area.     tab keystroke inserts tab document. shift-tab seems     ignored.      example shows different approaches tabbing out of jtextarea      also, text area typically added scroll pane. when     tabbing forward vertical scroll bar focus default.     each approach shows how prevent scrollbar getting focus. */ import java.awt.*; import java.util.*; import java.awt.event.*; import javax.swing.*;  public class textareatab extends jframe {     public textareatab()     {         container contentpane = getcontentpane();         contentpane.setlayout(new boxlayout(contentpane, boxlayout.y_axis));          contentpane.add( nulltraversalkeys() );         contentpane.add( writeyourownaction() );         contentpane.add( usekeylistener() );         contentpane.add( addtraversalkeys() );     }      //  reset text area use default tab keys.     //  best solution.      private jcomponent nulltraversalkeys()     {         jtextarea textarea = new jtextarea(3, 30);          textarea.settext("null traversal keys\n2\n3\n4\n5\n6\n7\n8\n9");         jscrollpane scrollpane = new jscrollpane( textarea ); //        scrollpane.getverticalscrollbar().setfocusable(false);          textarea.setfocustraversalkeys(keyboardfocusmanager.forward_traversal_keys, null);         textarea.setfocustraversalkeys(keyboardfocusmanager.backward_traversal_keys, null);          return scrollpane;     }      //  replace tab actions. little more complicated     //  solution place focus on component, not     //  vertical scroll bar, when tabbing backwards (unless of course     //  have manually prevented scroll bar getting focus).      private jcomponent writeyourownaction()     {         jtextarea textarea = new jtextarea(3, 30);         textarea.settext("write own tab actions\n2\n3\n4\n5\n6\n7\n8\n9");         jscrollpane scrollpane = new jscrollpane( textarea );          inputmap im = textarea.getinputmap();         keystroke tab = keystroke.getkeystroke("tab");         textarea.getactionmap().put(im.get(tab), new tabaction(true));         keystroke shifttab = keystroke.getkeystroke("shift tab");         im.put(shifttab, shifttab);         textarea.getactionmap().put(im.get(shifttab), new tabaction(false));          return scrollpane;     }      //  use keylistener      private jcomponent usekeylistener()     {         jtextarea textarea = new jtextarea(3, 30);         textarea.settext("use key listener\n2\n3\n4\n5\n6\n7\n8\n9");         jscrollpane scrollpane = new jscrollpane( textarea );         scrollpane.getverticalscrollbar().setfocusable(false);          textarea.addkeylistener(new keyadapter()         {             public void keypressed(keyevent e)             {                 if (e.getkeycode() == keyevent.vk_tab)                 {                     e.consume();                     keyboardfocusmanager.                         getcurrentkeyboardfocusmanager().focusnextcomponent();                 }                  if (e.getkeycode() == keyevent.vk_tab                 &&  e.isshiftdown())                 {                     e.consume();                     keyboardfocusmanager.                         getcurrentkeyboardfocusmanager().focuspreviouscomponent();                 }             }         });          return scrollpane;     }      //  add tab , shift-tab keystrokes focus traversal keys.     //  seems more complicated using null, @ least     //  shows how add keystroke focus traversal key.      private jcomponent addtraversalkeys()     {         jtextarea textarea = new jtextarea(3, 30);         textarea.settext("add traversal keys\n2\n3\n4\n5\n6\n7\n8\n9");         jscrollpane scrollpane = new jscrollpane( textarea );         scrollpane.getverticalscrollbar().setfocusable(false);          set set = new hashset( textarea.getfocustraversalkeys(             keyboardfocusmanager.forward_traversal_keys ) );         set.add( keystroke.getkeystroke( "tab" ) );         textarea.setfocustraversalkeys(             keyboardfocusmanager.forward_traversal_keys, set );          set = new hashset( textarea.getfocustraversalkeys(             keyboardfocusmanager.backward_traversal_keys ) );         set.add( keystroke.getkeystroke( "shift tab" ) );         textarea.setfocustraversalkeys(             keyboardfocusmanager.backward_traversal_keys, set );          return scrollpane;     }      class tabaction extends abstractaction     {         private boolean forward;          public tabaction(boolean forward)         {             this.forward = forward;         }          public void actionperformed(actionevent e)         {             if (forward)                 tabforward();             else                 tabbackward();         }          private void tabforward()         {             final keyboardfocusmanager manager =                 keyboardfocusmanager.getcurrentkeyboardfocusmanager();             manager.focusnextcomponent();              swingutilities.invokelater(new runnable()             {                 public void run()                 {                     if (manager.getfocusowner() instanceof jscrollbar)                         manager.focusnextcomponent();                 }             });         }          private void tabbackward()         {             final keyboardfocusmanager manager =                 keyboardfocusmanager.getcurrentkeyboardfocusmanager();             manager.focuspreviouscomponent();              swingutilities.invokelater(new runnable()             {                 public void run()                 {                     if (manager.getfocusowner() instanceof jscrollbar)                         manager.focuspreviouscomponent();                 }             });         }     }      public static void main(string[] args)     {         textareatab frame = new textareatab();         frame.setdefaultcloseoperation( exit_on_close );         frame.pack();         frame.setlocationrelativeto(null);         frame.setvisible(true);     } } 

Comments

Popular posts from this blog

apache - Add omitted ? to URLs -

redirect - bbPress Forum - rewrite to wwww.mysite prohibits login -

php - How can I stop spam on my custom forum/blog? -