Cursor Positionieren/mit Tabulator springen?

ghost

Bekanntes Mitglied
Ich hab ein Formular mit mehreren JTextAreas zur Eingabe ( angeordnet via Gridbag ). Nun wollte ich euch fragen ob folgendes möglich ist:

- Ist es machbar das beim aufruf des Formulars ( ist in einem tabbedpane ) der Cursor automatisch im ersten JTextArea ist, so das man gleich mit der Eingabe beginnen kann?

- Ist es möglich das man mit Hilfe der Tab-Taste immer zum nächsten Eingabefeld springen kann?

Danke für eure Tipps!

Hier noch ein zwei Schnippsel:

Java:
gbc.gridx=1;
     gbc.gridy=2;
     gbc.gridheight = 1;
     gbc.gridwidth = 1;
     JTextArea tnn = new JTextArea (1,10);
     tnn.requestFocusInWindow(); // egal ob mit oder ohne "InWindow" wird kein Cursor gesetzt
     gbl.setConstraints(tnn, gbc);
     panel2.add(tnn);

Java:
 public static void main(String[] args)
       {
              JTabbedPaneEx tabEx = new JTabbedPaneEx();
              tabEx.setVisible(true);
       }
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Das requestFocusInWindow funktioniert AFAIR erst, wenn das Fenster sichtbar ist. Kannst mal schauen, ob es funktioniert, wenn du sowas machst wie
Code:
fertigGebautesFenster.setVisible(true);
texField.requestFocusInWindow();

Ansonsten ... zum Weiterspringen mit TAB... das sollte meistens "automatisch" passen, Spezialfälle sollte man mit FocusTraversalPolicy (Java 2 Platform SE 5.0) abdecken können (hab' ich aber selbst noch nicht benutzt)
 

ghost

Bekanntes Mitglied
setVisible(true) setz ich ja beim Aufruf des tabEx/JTabbedPane aber das hilft dafür wohl nichts. Muss ichs extra nochmal für den entsprechenden JTabbedPane ( in dem das Gridbag sitzt ) ausführen?

Leider klappt das mim Tab-Sprung nicht automatisch ( nur mit STRG-Tab ) - naja muss ich mal weiterschaun.

Java:
import java.awt.*;
import javax.swing.*;

    public class JTabbedPaneEx extends JFrame
{
   public JTabbedPaneEx()
   {
      super ("AK - Adressbuch Version 0.1");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      // TabbedPane erzeugen
      JTabbedPane tabbedPane = new JTabbedPane();
      setSize (550, 500);
      setLocation(250,200);
       // >>> Tab Home <<<
       JPanel panel1 = new JPanel( new GridLayout(3,3) );
      // Label erzeugen
      JLabel lbl = new JLabel ("AK - Adressbuch Version 0.1");
      JLabel lb2 = new JLabel ("");
      JLabel lb3 = new JLabel ("");
      JLabel lb4 = new JLabel ("");
      JLabel lb5 = new JLabel ("");
      JLabel lb6 = new JLabel ("");
      JLabel lb7 = new JLabel ("");
      JLabel lb8 = new JLabel ("");
      JLabel lb9 = new JLabel ("");

      panel1.add( lb2 );
      panel1.add( lb3 );
      panel1.add( lb4 );
      panel1.add( lb5 );
      panel1.add( lbl );
      panel1.add( lb6 );
      panel1.add( lb7 );
      panel1.add( lb8 );
      panel1.add( lb9 );

          // Label der TabbedPane hinzufügen
      tabbedPane.addTab ("Home", panel1);
      
           // >>> Tab Eintragen <<<
         
               JPanel panel2 = new JPanel();

       GridBagLayout gbl=new GridBagLayout();
       panel2.setLayout(gbl);
       GridBagConstraints gbc=new GridBagConstraints();
       gbc.fill=GridBagConstraints.HORIZONTAL;
       
            gbc.insets = new Insets(2,2,2,2);

           // gbc.gridx = 0;  // x-Position im gedachten Gitter
            //gbc.gridy = 0;  // y-Position im gedachten Gitter
            //gbc.gridheight = 2;  // zwei Gitter-Felder hoch
            //List list = new List(3);
            //gbl.setConstraints(list, gbc);
            //panel2.add(list);
       
     gbc.gridx=0;
     gbc.gridy=1;
     gbc.gridheight = 3;
     gbc.gridwidth = 5;
     JLabel lue = new JLabel ("Neuen Kontakt erfassen");
     lue.setHorizontalAlignment(JLabel.CENTER);
     lue.setVerticalAlignment(JLabel.CENTER);
     gbl.setConstraints(lue, gbc);
     panel2.add(lue);
     
     // Zwischenzeile
     gbc.gridx=0;
     gbc.gridy=4;
     gbc.gridheight = 1;
     gbc.gridwidth = 1;
     JLabel leerz = new JLabel ("   ");
     gbl.setConstraints(leerz, gbc);
     panel2.add(leerz);
     
     gbc.gridx=0;
     gbc.gridy=5;
     gbc.gridheight = 1;
     gbc.gridwidth = 1;
     JLabel lnn = new JLabel ("Nachname: ");
     gbl.setConstraints(lnn, gbc);
     panel2.add(lnn);
     
     gbc.gridx=1;
     gbc.gridy=5;
     gbc.gridheight = 1;
     gbc.gridwidth = 1;
     JTextArea tnn = new JTextArea (1,10);
     //tnn.requestFocusInWindow();
     gbl.setConstraints(tnn, gbc);
     panel2.add(tnn);
     
     // Zwischenspalte
     gbc.gridx=2;
     gbc.gridy=5;
     gbc.gridheight = 1;
     gbc.gridwidth = 1;
     JLabel leer = new JLabel("       ");
     gbl.setConstraints(leer, gbc);
     panel2.add(leer);
     
     gbc.gridx=3;
     gbc.gridy=5;
     gbc.gridheight = 1;
     gbc.gridwidth = 1;
     JLabel lvn = new JLabel ("Vorname: ");
     gbl.setConstraints(lvn, gbc);
     panel2.add(lvn);
     
     gbc.gridx=4;
     gbc.gridy=5;
     gbc.gridheight = 1;
     gbc.gridwidth = 1;
     JTextArea tvn = new JTextArea(1,10);
     gbl.setConstraints(tvn, gbc);
     panel2.add(tvn);
     
     gbc.gridx=0;
     gbc.gridy=6;
     gbc.gridheight = 1;
     JLabel lni = new JLabel ("Nickname: ");
     gbl.setConstraints(lni, gbc);
     panel2.add(lni);
     
     gbc.gridx=1;
     gbc.gridy=6;
     gbc.gridheight = 1;
     JTextArea tni = new JTextArea(1,1);
     gbl.setConstraints(tni, gbc);
     panel2.add(tni);
     
     gbc.gridx=3;
     gbc.gridy=6;
     gbc.gridheight = 1;
     JLabel lni2 = new JLabel("Nickname2: ");
     gbl.setConstraints(lni2, gbc);
     panel2.add(lni2);
     
     gbc.gridx=4;
     gbc.gridy=6;
     gbc.gridheight = 1;
     JTextArea tni2 = new JTextArea(1,1);
     gbl.setConstraints(tni2, gbc);
     panel2.add(tni2);
     
     gbc.gridx=0;
     gbc.gridy=7;
     gbc.gridheight = 1;
     JLabel lst = new JLabel("Strasse: ");
     gbl.setConstraints(lst, gbc);
     panel2.add(lst);
     
     gbc.gridx=1;
     gbc.gridy=7;
     gbc.gridheight = 1;
     JTextArea tst = new JTextArea(1,1);
     gbl.setConstraints(tst, gbc);
     panel2.add(tst);
     
     gbc.gridx=3;
     gbc.gridy=7;
     gbc.gridheight = 1;
     JLabel lhn = new JLabel("Hausnummer: ");
     gbl.setConstraints(lhn, gbc);
     panel2.add(lhn);
     
     gbc.gridx=4;
     gbc.gridy=7;
     gbc.gridheight = 1;
     JTextArea thn = new JTextArea(1,1);
     gbl.setConstraints(thn, gbc);
     panel2.add(thn);
     
     gbc.gridx=0;
     gbc.gridy=8;
     gbc.gridheight = 1;
     JLabel lort = new JLabel("Wohnort: ");
     gbl.setConstraints(lort, gbc);
     panel2.add(lort);
     
     gbc.gridx=1;
     gbc.gridy=8;
     gbc.gridheight = 1;
     JTextArea tort = new JTextArea(1,1);
     gbl.setConstraints(tort, gbc);
     panel2.add(tort);

     gbc.gridx=3;
     gbc.gridy=8;
     gbc.gridheight = 1;
     JLabel lplz = new JLabel("PLZ: ");
     gbl.setConstraints(lplz, gbc);
     panel2.add(lplz);

     gbc.gridx=4;
     gbc.gridy=8;
     gbc.gridheight = 1;
     JTextArea tplz = new JTextArea(1,1);
     gbl.setConstraints(tplz, gbc);
     panel2.add(tplz);
     
     gbc.gridx=0;
     gbc.gridy=9;
     gbc.gridheight = 1;
     JLabel lla = new JLabel("Land: ");
     gbl.setConstraints(lla, gbc);
     panel2.add(lla);
     
     gbc.gridx=1;
     gbc.gridy=9;
     gbc.gridheight = 1;
     JTextArea tla = new JTextArea(1,1);
     gbl.setConstraints(tla, gbc);
     panel2.add(tla);
     
     gbc.gridx=3;
     gbc.gridy=9;
     gbc.gridheight = 1;
     JLabel lha = new JLabel("Handy: ");
     gbl.setConstraints(lha, gbc);
     panel2.add(lha);

     gbc.gridx=4;
     gbc.gridy=9;
     gbc.gridheight = 1;
     JTextArea tha = new JTextArea(1,1);
     gbl.setConstraints(tha, gbc);
     panel2.add(tha);

     gbc.gridx=0;
     gbc.gridy=10;
     gbc.gridheight = 1;
     JLabel ltel = new JLabel("Telefon: ");
     gbl.setConstraints(ltel, gbc);
     panel2.add(ltel);

     gbc.gridx=1;
     gbc.gridy=10;
     gbc.gridheight = 1;
     JTextArea ttel = new JTextArea(1,1);
     gbl.setConstraints(ttel, gbc);
     panel2.add(ttel);
     
     gbc.gridx=3;
     gbc.gridy=10;
     gbc.gridheight = 1;
     JLabel lgeb = new JLabel("Geburtstag: ");
     gbl.setConstraints(lgeb, gbc);
     panel2.add(lgeb);
     
     gbc.gridx=4;
     gbc.gridy=10;
     gbc.gridheight = 1;
     JTextArea tgeb = new JTextArea(1,1);
     gbl.setConstraints(tgeb, gbc);
     panel2.add(tgeb);

     gbc.gridx=0;
     gbc.gridy=11;
     gbc.gridheight = 1;
     JLabel lsky = new JLabel("Skype: ");
     gbl.setConstraints(lsky, gbc);
     panel2.add(lsky);

     gbc.gridx=1;
     gbc.gridy=11;
     gbc.gridheight = 1;
     JTextArea tsky = new JTextArea(1,1);
     gbl.setConstraints(tsky, gbc);
     panel2.add(tsky);
     
     gbc.gridx=3;
     gbc.gridy=11;
     gbc.gridheight = 1;
     JLabel lmsn = new JLabel("MSN: ");
     gbl.setConstraints(lmsn, gbc);
     panel2.add(lmsn);
     
     gbc.gridx=4;
     gbc.gridy=11;
     gbc.gridheight = 1;
     JTextArea tmsn = new JTextArea(1,1);
     gbl.setConstraints(tmsn, gbc);
     panel2.add(tmsn);

     gbc.gridx=0;
     gbc.gridy=12;
     gbc.gridheight = 1;
     gbc.gridwidth = 5;
     JLabel lkom = new JLabel("Kommentar: ");
     gbl.setConstraints(lkom, gbc);
     panel2.add(lkom);
     
     gbc.gridx=0;
     gbc.gridy=13;
     gbc.gridheight = 1;
     JTextArea tkom = new JTextArea(5,1);
     gbl.setConstraints(tkom, gbc);
     panel2.add(tkom);

     gbc.gridx=0;
     gbc.gridy=14;
     gbc.gridheight = 1;
     gbc.gridwidth = 5;
     JButton bsp = new JButton ("Speichern");
     //bsp.addActionListener(this);
     gbl.setConstraints(bsp, gbc);
     panel2.add(bsp);
     
     
     //pack();

     tabbedPane.addTab ("Erfassen", panel2);
     
     
                  // >>> Tab Suche <<<
            // TextArea erzeugen
      JTextArea txt2 = new JTextArea ("JTextArea");
      // TextArea der TabbedPane hinzufügen
      tabbedPane.addTab ("Suche", txt2);
      
      
             // >>> Tab Geburtstagsliste <<<
            // TextArea erzeugen
      JTextArea txt3 = new JTextArea ("JTextArea");
      // TextArea der TabbedPane hinzufügen
      tabbedPane.addTab ("Geburtstagsliste", txt3);
      
      
             // >>> Tab Komplettliste <<<
            // TextArea erzeugen
      JTextArea txt = new JTextArea ("JTextArea");
      // TextArea der TabbedPane hinzufügen
      tabbedPane.addTab ("Datenbank", txt);

      // Drittes Tab auswählen. Das erste Tab hat den Index 0.
      tabbedPane.setSelectedIndex (1);

      // TabbedPane der ContentPane hinzufügen
      getContentPane().add (tabbedPane);

   }



       public static void main(String[] args)
       {
              JTabbedPaneEx tabEx = new JTabbedPaneEx();
              tabEx.setVisible(true);
       }
}
 

Marco13

Top Contributor
Ah, sorry, das sind TextAreas, keine TextFields. Bei TextAreas kann man auch mehrzeiligen Text eingeben. Und insbesondere kann man bei TextAreas auch ein "TAB" eintippen, das dann als TAB angezeigt wird. Man müßte die Taste "TAB" da irgendwie abfangen (vielleicht mit einem DocumentListener oder so ???:L ) damit das TAB nicht eingegeben, sondern stattdessen der Focus weitergecyclet wird.
Da das ohnehin alles einzeilige Eingabebereiche sind, wäre es vielleicht am sinnvollsten, die alle durch TextFields zu ersetzen. Dann sollte das weiterTABen schon mal klappen. Der der Focus am Anfang... da muss man dann nochmal schauen.
 

ghost

Bekanntes Mitglied
Hab jetzt die TextAreas zu TextFields gemacht und damit funktionierts auch mim TAB - Danke!!!

Vielleicht hat ja noch wer ne Idee bzgl. des Focus ;)
 

Marco13

Top Contributor
Darauf wollte ich eigentlich hinaus, als ich oben erwähnt hatte, dass es nach dem Sichtbarmachen passieren sollte: Wenn das Sichtbarmachen (wie es sein sollte) schon in einem SwingUtilities.invokeLater passiert, sollte es eigentlich funktionieren, wenn man das requestFocus auch dort (direkt danach) macht. Aber vielleicht ist die Annahme, dass
Code:
SwingUtilities.invokeLater(new Runnable(){public void run() { [b]first();[/b] }});
SwingUtilities.invokeLater(new Runnable(){public void run() { [b]second();[/b] }});
gleichbedeutend ist mit
Code:
SwingUtilities.invokeLater(new Runnable(){public void run() { [b]first(); second();[/b] }});
auch falsch (oder, was mindestens genauso wahrscheinlich ist: Die Annahme, dass das Sichtbarmachen schon im EDT passiert ;) ). In diesem Fall müßte man das requestFocus nochmal explizit einwickeln.
 

ghost

Bekanntes Mitglied
Da war ich so froh das das mit dem TAB jetzt so leicht zu änderen war und jetzt versteh ich nur noch Bahnhof *gg*

SwingUtilities#invokeLater < hab ich noch nie gehört/bearbeitet - naja, ich wollte bei dem Tool ja auch was lernen. Dann werd ich mich da mal einlesen. Danke für die Tipps!
 
G

Gast2

Gast
Da war ich so froh das das mit dem TAB jetzt so leicht zu änderen war und jetzt versteh ich nur noch Bahnhof *gg*

SwingUtilities#invokeLater < hab ich noch nie gehört/bearbeitet - naja, ich wollte bei dem Tool ja auch was lernen. Dann werd ich mich da mal einlesen. Danke für die Tipps!

Gute Suchwörter sind noch EDT ;)
 

Neue Themen


Oben