Swing getText()

IwiS

Bekanntes Mitglied
Hallo und guten Abend alle zusammen,

ich arbeite im Moment an einem kleinen Programm, es ist ein Editor. Ich habe nun eine Methode, mit der ich eine neue Datei erstelle, den Text aus einer JTextArea einlesen möchte (Knackpunkt!) und danach abspeichern möchte. Nun funktioniert das mit dem einlesen nicht so, wie gewünscht.
Ich hoffe, ihr könnt mir helfen!

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

public class Application extends JFrame
{
 public void speichern()
 {
  File file = new File("Notiz.txt");
  try
  {
   FileWriter filewriter = new FileWriter(file, true);
   filewriter.write(textarea.getText());
   filewriter.flush();
   filewriter.close();
   JLabel label = new JLabel("Datei wurde erfolgreich gespeichert");
   add(label, BorderLayout.PAGE_END);
  }
  catch(IOException e)
  {
   e.printStackTrace();
  }
 }
 public Application()
 {
  final Image image = Toolkit.getDefaultToolkit().getImage("icon.png");
  setIconImage(image);
  setLocation(550, 150);
  setSize(650, 625);
  setTitle("Notiz");
  setVisible(true);
  final JTextArea textarea = new JTextArea();
  add(textarea, BorderLayout.CENTER);
  JMenuBar menubar = new JMenuBar();
  JMenu menu = new JMenu("Datei");
  JMenu menu2 = new JMenu("Bearbeiten");
  JMenu untermenu = new JMenu("Schriftfarbe");
  JMenuItem menuitem = new JMenuItem("  Speichern");
  menuitem.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    speichern();
   }
  }
  );
  JMenuItem menuitem2 = new JMenuItem("  Über");
  menuitem2.setIcon(new ImageIcon("iconf.png"));
  menuitem2.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    JDialog dialog = new JDialog();
    dialog.setIconImage(image);
    dialog.setLocation(725, 225);
    dialog.setSize(350, 300);
    dialog.setTitle("Über Notiz");
    dialog.setVisible(true);
   }
  }
  );
  JMenuItem menuitem3 = new JMenuItem("  Beenden");
  menuitem3.setIcon(new ImageIcon("iconb.png"));
  menuitem3.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    System.exit(0);
   }
  }
  );
  JMenuItem menuitem4 = new JMenuItem("  Rot");
  menuitem.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    textarea.setForeground(new Color(250, 0, 0));
   }
  }
  );
  JMenuItem menuitem5 = new JMenuItem("Schwarz");
  menuitem2.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    textarea.setForeground(new Color(0, 0, 0));
   }
  }
  );
  add(menubar, BorderLayout.PAGE_START);
  menubar.add(menu, BorderLayout.PAGE_START);
  menu.add(menuitem);
  menu.add(menuitem2);
  menu.add(menuitem3);
  menubar.add(menu2);
  menu2.add(untermenu);
  untermenu.add(menuitem4);  
  untermenu.add(menuitem5);
 }
 public static void main(String[] args)
 {
  Application app = new Application();
 }
}

lg IwiS
 
C

Camino

Gast
Java:
final JTextArea textarea = new JTextArea();
Hmm, vielleicht textarea als Objektvariable anlegen, dann kannst du auch in deiner Methode speichern() drauf zugreifen. Du hast die bisher nur im Konstruktor sichtbar.
 

jgh

Top Contributor
deine textarea ist nur im Konstruktor gültig...wenn du die als Klassenvariable nutzt, dann klappt dein Vorhaben auch.
 

IwiS

Bekanntes Mitglied
Hallo,

ich habe den Code abgeändert, jetzt funktioniert das Compilieren zwar, aber ich bekommen beim Ausführen nicht die gewünschte Funktion. In der abgespeicherten Datei steht dann gar nichts.
Woran könnte das liegen?

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

public class Application extends JFrame
{
 JTextArea   textarea;
 public void speichern()
 {
  File file = new File("Notiz.txt");
  try
  {
   FileWriter filewriter = new FileWriter(file, true);
   filewriter.write(textarea.getText());
   filewriter.flush();
   filewriter.close();
  }
  catch(IOException e)
  {
   e.printStackTrace();
  }
 }
 public Application()
 {
  final Image image = Toolkit.getDefaultToolkit().getImage("icon.png");
  setIconImage(image);
  setLocation(550, 150);
  setSize(650, 625);
  setTitle("Notiz");
  setVisible(true);
  final JTextArea textarea = new JTextArea();
  add(textarea, BorderLayout.CENTER);
  JMenuBar menubar = new JMenuBar();
  JMenu menu = new JMenu("Datei");
  JMenu menu2 = new JMenu("Bearbeiten");
  JMenu untermenu = new JMenu("Schriftfarbe");
  JMenuItem menuitem = new JMenuItem("  Speichern");
  menuitem.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    speichern();
   }
  }
  );
  JMenuItem menuitem2 = new JMenuItem("  Über");
  menuitem2.setIcon(new ImageIcon("iconf.png"));
  menuitem2.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    JDialog dialog = new JDialog();
    dialog.setIconImage(image);
    dialog.setLocation(725, 225);
    dialog.setSize(350, 300);
    dialog.setTitle("Über Notiz");
    dialog.setVisible(true);
   }
  }
  );
  JMenuItem menuitem3 = new JMenuItem("  Beenden");
  menuitem3.setIcon(new ImageIcon("iconb.png"));
  menuitem3.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent ev)
   {
    System.exit(0);
   }
  }
  );
  add(menubar, BorderLayout.PAGE_START);
  menubar.add(menu, BorderLayout.PAGE_START);
  menu.add(menuitem);
  menu.add(menuitem2);
  menu.add(menuitem3);
 }
 public static void main(String[] args)
 {
  Application app = new Application();
 }
}

lg IwiS
 
C

Camino

Gast
Du musst natürlich auch im Konstruktor das
Java:
final JTextArea textarea = new JTextArea();
in das
Java:
textarea = new JTextArea();
umändern, sonst bleibt die teaxtarea ja weiterhin nur im Konstruktor sichtbar.
 

IwiS

Bekanntes Mitglied
Hi,

vielen, vielen Dank! Dafür hast du von mir gerade ein Danke bekommen. Jetzt funktioniert es, Thema erledigt.

lg IwiS
 

jgh

Top Contributor
mmmh, weil du in der JTextarea auch irgendwas eingeben musst, damit da was drinsteht!!!
bei mir klappt das...btw

Java:
untermenu.add(menuitem4);
		untermenu.add(menuitem5);
		setVisible(true);//immer als letztes aufrufen, nachdem alle Komponenten geaddet worden sind
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//schadet bei Testprogrammen nicht!!!
 

Ähnliche Java Themen


Oben