SWT Curser an den Anfang eines Text Objektes setzen

cable545

Aktives Mitglied
Hallo,
ich habe in einer UI zwei untereinander angeordnete Objekte vom Typ Text aus der SWT Bibliothek. Das ober Textfeld ist nicht editierbar, das untere schon. Nun möchte ich, dass bei Programmstart sofort das Untere mit dem Curser versehen ist, ich also gleich losschreiben kann, ohne vorher in das Textfeld klicken zu müssen. Bisher ist es so, dass sich immer im oberen Textfeld, bei Programmstart, der Cursor befindet.
Hat jemand ne Idee?
 
Dafür gibt es die Methode setfocus, die musst du an dem Control aufrufen, dass den focus haben soll, also bei dir dein zweites textfeld

[edit]Warum zur Hölle kommen dauernd alle mit AWT und Swing an, wenns um SWT geht :autsch:[/edit]
 
Hallo,
ich habe in einer UI zwei untereinander angeordnete Objekte vom Typ Text aus der SWT Bibliothek. Das ober Textfeld ist nicht editierbar, das untere schon. Nun möchte ich, dass bei Programmstart sofort das Untere mit dem Curser versehen ist, ich also gleich losschreiben kann, ohne vorher in das Textfeld klicken zu müssen. Bisher ist es so, dass sich immer im oberen Textfeld, bei Programmstart, der Cursor befindet.
Hat jemand ne Idee?

Ja es gibt ne Methode setFocus einfach text2.setFocus() aufrufen...

Moin,

das Stichwort, dass Du suchst heißt "Caret" (Caret-Listener usw.)

Java Platform SE 6 (in der linken unteren Liste nach "Caret" suchen)

Gruß
Klaus

1. Frägt er nach SWT, warum dann Swing?
2. Will er nur den Focus sofort auf das Textfeld setzen


EDIT: zu langsam 😛
 
Guten Morgen,
ich danke Euch für die schnellen Antworten, jedoch scheint die Sache mit setFocous() nicht richtig zu funktionieren. Sie gibt mir auch immer false zurück. Ich erkläre mal wie genau das bei mir aussieht.
Ich habe in meiner Anwendung einen CTabFolder. Dieser hat beim Start des Programms schon ein CTabItem. Diesem CTabItem ist ein Composite zugeordnet in welchem sich ein Text befindet, in dem untereinander ein paar Namen stehen.
Wenn ich auf einen der Namen(String) einen Doppelklick ausführe, erstelle ich ein neues CTabItem. Diesem CTabItem ist wieder ein Composite zugeordnet, in welchem sich die besagten Textfelder befinden.
Wenn ich dann auf diesem Tab klicke(in der Tableiste) sehe ich immer, dass sich der Curser im oberen nicht editierbaren Text befindet.???:L Trotz der setFocus() Methode des zweiten Textes.
Hat jemand ne Idee wo mein Fehler versteckt ist?
 
Guten Morgen,
ich danke Euch für die schnellen Antworten, jedoch scheint die Sache mit setFocous() nicht richtig zu funktionieren. Sie gibt mir auch immer false zurück. Ich erkläre mal wie genau das bei mir aussieht.
Ich habe in meiner Anwendung einen CTabFolder. Dieser hat beim Start des Programms schon ein CTabItem. Diesem CTabItem ist ein Composite zugeordnet in welchem sich ein Text befindet, in dem untereinander ein paar Namen stehen.
Wenn ich auf einen der Namen(String) einen Doppelklick ausführe, erstelle ich ein neues CTabItem. Diesem CTabItem ist wieder ein Composite zugeordnet, in welchem sich die besagten Textfelder befinden.
Wenn ich dann auf diesem Tab klicke(in der Tableiste) sehe ich immer, dass sich der Curser im oberen nicht editierbaren Text befindet.???:L Trotz der setFocus() Methode des zweiten Textes.
Hat jemand ne Idee wo mein Fehler versteckt ist?

Ja mach ein KSKB...
Wahrscheinlich brauchst ein FocusListener auf dein TabItem und in dem musst du deinem 2ten Textfeld dein Focus geben
 
Dem CTabItem läßt sich leider kein FocusListener hinzufügen. Ich hab jetzt jedoch dem composite welches jedem CTabItem, in meinem Programm, zugeordnet wird ein PaintListener hinzugefügt. Also immer wenn jetzt ein Tab geöffnet oder angezeigt wird, wird ja mein composite darauf "gezeichnet".
Und dann führe ich in der paintControl() Methode die Methode setFocus() auf meinen Text aus.
Jetzt funzt es:applaus::applaus:
Ich danke Euch!!!
 
Dem CTabItem läßt sich leider kein FocusListener hinzufügen. Ich hab jetzt jedoch dem composite welches jedem CTabItem, in meinem Programm, zugeordnet wird ein PaintListener hinzugefügt. Also immer wenn jetzt ein Tab geöffnet oder angezeigt wird, wird ja mein composite darauf "gezeichnet".
Und dann führe ich in der paintControl() Methode die Methode setFocus() auf meinen Text aus.
Jetzt funzt es:applaus::applaus:
Ich danke Euch!!!

Ich würde keinen PaintListener nehmen, sobald du dein Fenster minimierst,maximierst usw. springt der Focus immer dort hin.
Dann setz eben auf dem Composite oder so den FocusListener.
 
Wenn ich mich mit einem FocusListener beim Composite anmelde, registriert der Listener leider kein Event, sobald ich das ITabItem öffne oder wiederherstelle oder wie auch immer.
 
Hallo,
so ich hab mal eben ein Beispiel gebaut was mein Problem gut darstellt. Also wie gesagt, ein FocusListener auf das jeweilige Composite funzt bei mir nicht.
Die einzige Lösung die ich im Moment für mein Problem sehe ist ein PaintListener auf das jeweilige Composite welches die Text Objekte enthält.

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class Test {
   
   public static CTabFolder folder;
	
	public static void main(String[] args) {
	   final Display display = new Display();
	   final Shell   shell   = new Shell(display);
           shell.setSize( 400, 650 );
           shell.setLayout(new FillLayout());
      
           folder = new CTabFolder(shell, SWT.TOP);
           folder.setLayout(new FillLayout());
           folder.setTabHeight(22);
           folder.setSimple(false);
      
           CTabItem tab = new CTabItem(folder, SWT.NONE);
           tab.setText("Kontakte");
           Composite page1 = new Composite(folder, SWT.NONE);
           page1.setLayout( new FillLayout() );
           tab.setControl(page1);
      
           final Text userListText = new Text(page1, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
           userListText.setText( "Hans\nJonas\nEmil\n" );
      
           userListText.addMouseListener( new MouseListener() {
             @Override
             public void mouseDoubleClick(MouseEvent arg0) {
            
                String rName = userListText.getSelectionText();
                createTabPage(rName);
             }

             @Override
             public void mouseDown(MouseEvent arg0) {
               // TODO Auto-generated method stub
             }

             @Override
             public void mouseUp(MouseEvent arg0) {
                // TODO Auto-generated method stub
             }
          });
 
         shell.open();
         while( !shell.isDisposed() ) 
            if ( !display.readAndDispatch() )
               display.sleep();
         display.dispose();
      }
	
      protected static void createTabPage(String label) {
       
         CTabItem tab = new CTabItem(folder, SWT.CLOSE);
         tab.setText(label);
      
         FillLayout fillLayout = new FillLayout();
         fillLayout.type = SWT.VERTICAL;
      
         Composite page    = new Composite(folder, SWT.NONE);
         page.setLayout( fillLayout );
         final Text text1        = new Text( page, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY );
         final Text text2 = new Text( page, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL );
      
         tab.setControl(page);
      }
}
 
Warum nicht einfach:
Java:
    protected static void createTabPage(String label) {
         CTabItem tab = new CTabItem(folder, SWT.CLOSE);
         tab.setText(label);
      
         FillLayout fillLayout = new FillLayout();
         fillLayout.type = SWT.VERTICAL;
      
         Composite page    = new Composite(folder, SWT.NONE);    
         page.setLayout( fillLayout );
         final Text text1        = new Text( page, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY );
         final Text text2 = new Text( page, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL );
         text1.addFocusListener(new FocusAdapter() {
        	 
        	 @Override
        	public void focusGained(FocusEvent e) {
        		 text2.setFocus();
        	}
		});
         tab.setControl(page);
      }
 

Zurück
Oben