JTextAray und Cursor

Status
Nicht offen für weitere Antworten.

Dana

Aktives Mitglied
Hallo Freunde,
ich habe ein Problem und brauche eure Hilfe. Ich habe zwei Fenster. MyDialog wird gestartet, wenn ich bei HauptFenster auf but1 drucke. MyDilaog ist nicht Modal, d.h. beide Fenster sind übereinander und ich kann mit beiden arbeiten. Mein Problem ist, wenn ich bei MyDialog auf but2 drucke sollte der Cursor auf die erste Zeile der JTextAray springen. Ich habe mit
select(int ,int ); und .setCaretPosition(int); versucht hat es aber nichts funktioniert, weil ich die JTextAray als erste selektieren muss dann kann der Cursor auf die gewünschte Zeile springen

MfG
Code:
public class HauptFenster extends JFrame 
{ 
public JTextArea MyArea = new JTextArea(2, 1);    
public HauptFenster () 
    {    
   . 
   . 
   . 
   . 
    JButton but1= new JButton("but1");    

    but1.addMouseListener(new but1_mouseAdapter(this)); 
         } 

   } 
} 
class but1_mouseAdapter extends MouseAdapter 
{ 
HauptFenster frame; 

protected but1_mouseAdapter(HauptFenster frame) 
{ 
   this.frame = frame; 
} 
  public void mouseReleased(MouseEvent event) 
   { 
MyDialog frame = new MyDialog(); 
   } 
} 


public class MyDialog extends JDialog 
{ 

public JButton but2= new JButton("but2");  
HauptFenster frame; 
public MyDialog (HauptFenster frame) 
    {    
             super(frame); 
             this.setModal(false); 
   . 
   . 
   . 
   . 

   but2MyDialog.addMouseListener(new but2MyDialog _mouseAdapter(this)); 
         } 
    public void SetCursor () 
           { 
   	    // frame.MyArea .setCaretPosition(1);
            //frame.MyArea.select(0,1 );
            } 

   } 
} 
class but2MyDialog _mouseAdapter extends MouseAdapter 
{ 
MyDialog frame; 

protected but2MyDialog _mouseAdapter(MyDialog frame) 
{ 
   this.frame = frame; 
} 
  public void mouseReleased(MouseEvent event) 
   { 
      frame. SetCursor (); 
   } 
}
 
dann lass das Textfeld zuerst nach dem Focus "fragen" und setze dann den Cursor

Code:
textfeld.requestFocusInWindow();
 
Funktioniert bei mir ohne Probleme, ein kleines Beispiel:

Code:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;


public class Test {

	private static JTextField field = null;
	
	public static void main(String[] args) {
		
		JFrame f = new JFrame();
		JButton butt = new JButton("Click");
		JButton butt2 = new JButton("Not Click");
		field = new JTextField("test text");
		f.getContentPane().add(field);
		f.getContentPane().add(butt, BorderLayout.SOUTH);
		f.getContentPane().add(butt2, BorderLayout.NORTH);
		butt.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent evt) {
				field.requestFocusInWindow();
				field.setCaretPosition(0);
			}
		});
		butt2.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent evt) {
				field.setCaretPosition(0);
			}
		});
		f.setSize(200, 200);
		f.setVisible(true);
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
	}
}
 
Es geht wirklich bei mir nicht. Kann es nicht daran liegen, dass ich zwei verschiedene Klassen habe?
 
Wenn ich dein Code bei mir probiere gibt er mir die Fehlermeldung:
Auf lokale Variable frame wird aus einer verschachtelten Klassen heraus zugegriffen; sie muss als finale deklariert sein
 
Es geht wirklich bei mir nicht. Kann es nicht daran liegen, dass ich zwei verschiedene Klassen habe?

Nein, wobei deine Klassen sehr verwirrend und umständlich aufgebaut sind (soweit ich das beurteilen kann). Dabei kann schon ein Fehler unterlaufen.

Wenn ich dein Code bei mir probiere gibt er mir die Fehlermeldung:
Auf lokale Variable frame wird aus einer verschachtelten Klassen heraus zugegriffen; sie muss als finale deklariert sein

Was verwendest du denn bitte für eine IDE, die solche Fehlermeldungen zurückgibt? Und was für einen Compiler, der das so nicht compilen will? Dann mach halt was er sagt, und mach das JFrame final. War ja nur mal schnell zusammen getippt von mir 😉 .
 
Was verwendest du denn bitte für eine IDE

ich benutze Borland JBuilder
wobei deine Klassen sehr verwirrend und umständlich aufgebaut sind
in den klassen passieren viel mehr, dahier so unständig.

Ich kann frame nicht als finale deklarieren. es ist für mich ungunstig
Ich glaube bevor ich textfeld.requestFocusInWindow(); verwende muss ich erst Mal das Fenster „HauptFenster“ selektieren.
z.B.
HauptFenster.setSelectid oder so was dann textfeld.requestFocusInWindow(); oder ??
 
äh, du sollst es ja nur bei mir im Testprogramm als final deklarieren ...

kA, was HauptFenster.setSelectid macht, aber normal nicht.
 
ach ja in deinem Code funktioniert es, in meinem aber nicht, wie gesagt weil ich zwei verschiedene Fenster habe und sie stehen übereinander. d.h. wenn MyDialog gestartet ist, steht es im Vordergrund und ist automatisch im Fokus.
 
Dann versuch mal vorher das Fenster, bei dem der Cursor gesetzt werden soll, in den Vordergrund zu bringen. toFront heißt die Methode.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben