aktuelle Position einer JTextArea ermitteln

Status
Nicht offen für weitere Antworten.

balte

Mitglied
Hallo,

Ich habe ein Problem mit JTextArea.
Ich bin kein Informatiker und daher eher Laie, also nicht gleich schimpfen...

Ich habe ein Programm geschrieben dass mir ein Textfeld anzeigt, im Textfeld Menü kann ich die angezeigte Sprache wählen... Um zu wissen welche Sprache gewählt ist soll der Name des Textfeldes die jeweilige anzeigen. Da ich den Namen nicht aus dem laufenden Programm ändern konnte schliesse ich mein Textfeld bei jedem Sprachwechsel und öffne ein neues.
Das Problem ist, das das neue Textfeld, falls die Position des alten geändert wurde, an einem anderen Ort öffnet.
Dies ist optisch natürlich sehr unschön.
Meine Fragen sind nun folgende:

-Kann ich den Namen einer offenen JTextArea ändern, und wenn ja, wie?
-Wie kann ich die aktuelle Position einer JTextArea herausfinden?
(Die Befehle editor.gedPosition(); editor.Editor_width; .. geben nur den initiierten Anfangswert zurück)?
-Wenn ich noch andere Fenster offen habe, wie sage ich der JTextArea dass sie auf dem Monitor zuvorderst dargestellt werden soll?

Danke und lieber Gruss
 
Hi,

poste doch mal bitte den Code, den du schon hast. Das macht es einfacher für uns, zu verstehen, was dein Problem ist.
Den Code solltest du in [ JAVA]...[/ JAVA]-Tags (ohne die Leerstellen darin) schreiben, dann wird er auch fein formatiert und ist besser lesbar.

Lg
sayang
 
Meine JTextArea class sieht wie folgt aus:

Java:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;


public class Editor extends JFrame implements ActionListener {

  public boolean J01=false;
  public boolean J02=false;
  public boolean J03=false;
  public boolean J04=false;
  public boolean J05=false;
  
  public boolean J11=false;
  public boolean J12=false;
  public boolean J13=false;
  
  public boolean J21=false;
  public boolean J22=false;
  public boolean J23=false;
  
  
  int Editor_width;
  int Editor_height;

  JTextArea textfeld;

  public Editor(String name, int x, int y, int w, int h) {
    
  //public Editor(String name, int x, int y, int w, int h) {
    super(name);
    Editor_width=w;
    Editor_height=h;
    int X=x;
    int Y=y;
    textfeld = new JTextArea(Editor_height, Editor_width);
    setLocation(X,Y);
    textfeld.setTabSize(2);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //---------------------------------------------------------
    try {
      UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName());
    } 
    catch(Exception e) {
    };

    //--------------------------------------
    JMenuBar bar = new JMenuBar();

    //Menüeintrag Datei
    JMenuItem j01 = new JMenuItem("Datei öffnen");
    JMenuItem j02 = new JMenuItem("neue Datei");
    JMenuItem j03 = new JMenuItem("Baltensperger Code Speichern unter");
    JMenuItem j04 = new JMenuItem("Processing Code Speichern unter");
    JMenuItem j05 = new JMenuItem("Programm beenden");
    JMenu m1 = new JMenu("Datei");
    m1.add(j01);
    m1.add(j02);
    m1.add(j03);
    m1.add(j04);
    m1.add(j05);
    j01.addActionListener(this);
    j02.addActionListener(this);
    j03.addActionListener(this);
    j04.addActionListener(this);
    j05.addActionListener(this);
    bar.add(m1);

    //Menüeintrag Hilfe
    JMenuItem j11 = new JMenuItem("Code starten");
    JMenuItem j12 = new JMenuItem("Übersetzten Code anzeigen");
    JMenuItem j13 = new JMenuItem("Baltensperger Code anzeigen");
    JMenu m2 = new JMenu("Compyler");
    m2.add(j11);
    m2.add(j12);
    m2.add(j13);
    bar.add(m2);
    j11.addActionListener(this);
    j12.addActionListener(this);
    j13.addActionListener(this);

    //Menüeintrag Hilfe
    JMenuItem j21 = new JMenuItem("Hilfe");
    JMenuItem j22 = new JMenuItem("Referenz");
    JMenuItem j23 = new JMenuItem("Info");
    JMenu m3 = new JMenu("Hilfe");
    m3.add(j21);
    m3.add(j22);
    m3.add(j23);
    bar.add(m3);
    j21.addActionListener(this);
    j22.addActionListener(this);
    j23.addActionListener(this);

    //-----------------------------------------------
    JPanel pane = new JPanel(new BorderLayout());
    textfeld.setLineWrap(false);
    textfeld.setWrapStyleWord(true);
    JScrollPane scrollpane = new JScrollPane(textfeld, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    pane.add(scrollpane, BorderLayout.CENTER);

    setJMenuBar(bar);
    setContentPane(pane);
    pack();
    setVisible(true);
  }

  public void actionPerformed(ActionEvent evt){
    if (evt.getSource() instanceof JMenuItem) {
      JFileChooser auswahl = new JFileChooser();
      String cmd = evt.getActionCommand();
     
      if (cmd.equals("Datei öffnen")) {
        auswahl.showOpenDialog(this);
        String filename = auswahl.getSelectedFile().getPath();
        //Dateiinhalt aus SelectedFile auslesen
        String lines[] = loadStrings(filename);
        textfeld.setText("");
        for (int i=0; i < lines.length; i++) {
          String [] temp = new String[3];
          temp[0] = GetText();
          temp[1] = lines[i];
          temp[2] = "\n";//str(char(10));
          textfeld.setText(join(temp,""));
        }
        J01 = true;
      }

      if (cmd.equals("neue Datei")) J02 = true;
      if (cmd.equals("Baltensperger Code Speichern unter")) J03 = true;
      if (cmd.equals("Processing Code Speichern unter"))    J04 = true;
      if (cmd.equals("Programm beenden")) J05 = true;
      if (cmd.equals("Code starten"))     J11 = true;
      if (cmd.equals("Übersetzten Code anzeigen"))          J12 = true;
      if (cmd.equals("Baltensperger Code anzeigen"))        J13 = true;
      if (cmd.equals("Hilfe"))      J21 = true;
      if (cmd.equals("Referenz"))   J22 = true;
      if (cmd.equals("Info"))       J23 = true;
    }
  }

  String GetText(){
    String Get =textfeld.getText();
    return Get;
  }

  void SetText(String balte){
    textfeld.setText(balte);
  }
  
  void gedPosition(){
    println(textfeld.getColumns());
    println(textfeld.getHeight());
    println(textfeld.getLocation());
  }
  
}
 
Zuletzt bearbeitet:
-Kann ich den Namen einer offenen JTextArea ändern, und wenn ja, wie?

Meinst du mit Name den Textinhalt? Eine JTextArea ist ja ein Textfeld, in dem du mehr als nur eine Zeile Text anzeigen bzw. schreiben kannst. Und den Text kannst du natürlich auch im Quellcode ändern, aber ich bin mir nicht sicher ob es das ist, was du meinst.

-Wie kann ich die aktuelle Position einer JTextArea herausfinden?
(Die Befehle editor.gedPosition(); editor.Editor_width; .. geben nur den initiierten Anfangswert zurück)?

Also wenn deine JTextArea beispielsweise "area" heisst, könntest du mit "area.getLocation()" die Position als "Point" auslesen, aber auch "area.getX()" und "area.getY()" sollten eigentlich funktionieren (zumindest bietet mir Eclipse diese Methoden an).

-Wenn ich noch andere Fenster offen habe, wie sage ich der JTextArea dass sie auf dem Monitor zuvorderst dargestellt werden soll?

Verstehe ich ehrlich gesagt nicht ganz. Soll die JTextArea etwa auf das vorderste Fenster hüpfen, wenn du ein anderes Fenster in den Vordergrund holst? ???:L


Edit: Hab mir grad deinen Quellcode kopiert. Funktioniert der bei dir? Also bei mir nicht, da fehlen die Methoden "join" und "loadStrings". Aber generell noch zu deinem Code. Methodennamen schreibt man immer klein (-> also "getText()", usw), deine Methode "gedPosition" ist auch sehr unglücklich gewählt. Nicht nur, weil es von der Rechtschreibung her nicht passt, sondern auch, weil der Inhalt nicht zu dem Namen passt. Bei einer get-Methode erwartet man, dass etwas zurück kommt, aber du willst ja nur, dass drei Werte ausgegeben werden. Ich würde die Methode anders nennen.
 
Zuletzt bearbeitet von einem Moderator:
DAn ist mein Problem der JFrame? Wenn ich das Programm starte öffnet ein Editorfenster. Eigentlich dachte ich das sei die JTextArea. Wenn die JTextArea nur das Textfeld innerhalb des Rahmens ist erklärt das auch warum ich immer die gleiche Position bekomme.
Wie bekomme ich also die aktuelle Position des Fensters, und wie kann ich den Namen (super(name); )ändern?

Vielen Dank.
 
Ja, ich denke du meinst das JFrame. Den Namen kannst du natürlich ändern, indem du einfach den Parameter änderst, wenn du deine Klasse aufrufst. Wenn du zum Beispiel "Editor("Test", 0, 0, 0, 0)" hast, aber willst, dass dein Editor anders heisst, musst du "Test" ändern. Wenn du während der Laufzeit den Namen ändern willst (zB per Knopfdruck), dann wäre wohl "setName("neuer Name")" oder "setTitle("neuer Titel")" ne Option.
Die aktuelle Position des Fensters bekommst du denke ich auch per "getLocation()", so wie schonmal beschrieben.
 
Super, setTitle() funktioniert. Dann muss ich auch kein neues Fenster öffnen und das mit der Positionsabfrage ergibt sich dadurch auch.
Vielen Dank für die schnelle Hilfe!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben