Dienstag, 13. Dezember 2016

Textverarbeitungsprogramm mit Java programmieren


Textverarbeitungsprogramm mit Java programmieren

Code by D. Selzer-McKenzie

YoutubeVideo: https://youtu.be/eHP3n3afOEU

Hier zeige ich Ihnen, wie Sie mit Java ganz einfach eine komplette Textverarbeitung programmieren können.

Der SourceCode kann wegen der Steuerzeichen hier nicht eingeschrieben werden, aber Sie können den SourceCode im Forum


herauskopieren.

 

Hier der SourceCode.

import java.awt.*;

import java.util.*;

import java.awt.event.*;

import java.io.*;

import javax.swing.*;

import javax.swing.text.*;

import java.awt.print.*;

import java.text.*;

 

public class Editor extends JFrame  {

  final int ZEILEN  = 100;   //  Konstanten für die Größe

  final int SPALTEN = 400;   // der Textfläche

 

  // globale Variablen innerhalb der Klasse

  private String m_dateiname;  // zu ladende/speichernde Datei

  private String m_aktText;    // aktueller Text in der TextArea

  private JTextArea m_textanzeige;  // Text-Komponente

  private JComboBox m_fonts,m_styles;  // Auswahl von Font, Stil

  private JComboBox m_farben;          // und Farbe

  private Hashtable m_befehle;

  private String suchstring;

  private int    index;

 

  public static void main(String[] args) {

    // eine Instanz der Klasse anlegen und anzeigen

    Editor e = new Editor("Texteditor");

 

    // Position auf Bildschirm vorgeben

    e.setLocation(100,100);

    e.pack();

    e.setVisible(true);

  }

 

  // Im Konstruktur die Benutzerberfläche aufbauen

  Editor(String titel) {

    super(titel);

 

    // Menüleiste  mit Menüs anlegen

    JMenuBar menueleiste = new JMenuBar();

    setJMenuBar(menueleiste);

 

    JMenu menu1 = new JMenu("Datei");

    JMenuItem item1_1 = new JMenuItem("Datei laden");

    JMenuItem item1_2 = new JMenuItem("Datei speichern");

    JMenuItem item1_3 = new JMenuItem("Datei drucken");

    JMenuItem item1_4 = new JMenuItem("Programm beenden");

    menu1.add(item1_1);

    menu1.add(item1_2);

    menu1.add(item1_3);

    menu1.add(item1_4);

    menueleiste.add(menu1);

 

    JMenu menu2 = new JMenu("Bearbeiten");

    JMenuItem item2_1 = new JMenuItem("Ausscheiden");

    JMenuItem item2_2 = new JMenuItem("Kopieren");

    JMenuItem item2_3 = new JMenuItem("Einfügen");

    menu2.add(item2_1);

    menu2.add(item2_2);

    menu2.add(item2_3);

    menueleiste.add(menu2);

 

    JMenu menu3 = new JMenu("Suchen");

    JMenuItem item3_1 = new JMenuItem("String suchen");

    JMenuItem item3_2 = new JMenuItem("Weitersuchen");

    menu3.add(item3_1);

    menu3.add(item3_2);

    menueleiste.add(menu3);

 

    // Panel für den Textbereich und die Auswahlfelder

    JPanel p_außen = new JPanel();

    p_außen.setLayout(new BorderLayout());

     

    // Text-Komponente anlegen

    m_textanzeige = new JTextArea(ZEILEN, SPALTEN);

    m_textanzeige.setEditable(true);

 

    // Textkomponente scrollbar machen

    JScrollPane scroll = new JScrollPane();

    scroll.getViewport().add(m_textanzeige);     

 

    // Inneres Panel für die Auswahlmöglichkeiten

    JPanel p_innen = new JPanel();

    p_innen.setLayout(new GridLayout(1,4));

 

    // Auswahl von Schriftarten

    String[] fontNames;

    fontNames  = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

    m_fonts = new JComboBox();

    for(int i = 0; i < fontNames.length; i++)

       m_fonts.addItem(fontNames[i]);

   

 

    // Auswahl von Schriftstilen

    m_styles = new JComboBox();

    m_styles.addItem("normal");

    m_styles.addItem("kursiv");

    m_styles.addItem("fett");

 

    // Auswahl von Schriftfarben

    m_farben = new JComboBox();

    m_farben.addItem("Schwarz");         

    m_farben.addItem("Rot");

    m_farben.addItem("Grün");

    m_farben.addItem("Blau");

    m_farben.addItem("Gelb");

    m_farben.addItem("yan");

    m_farben.addItem("Magenta");

     

    p_innen.add(m_fonts); 

    p_innen.add(m_styles);

    p_innen.add(m_farben);

  

    p_außen.setPreferredSize(new Dimension(500,400));

    p_außen.add("Center",scroll); 

    p_außen.add("North",p_innen);

 

    // Panel zur Fensterklasse hinzufügen

    add(p_außen);               

   

    // Font, Farbe und Schriftstil festlegen 

    m_fonts.setSelectedItem("SansSerif");

    m_styles.setSelectedItem("normal");                    

    m_farben.setSelectedIndex(0);         

    fontAktualisieren();

 

 

    // Die verschiedenen Adapterklassen für das Maus Handling

    class MeinItemAdapter implements ItemListener {

      public void itemStateChanged(ItemEvent e) {

         fontAktualisieren();

      }  

    }

     

    class MeinActionLauscher implements ActionListener {

      public void actionPerformed(ActionEvent e) {

         String label;

 

         label = e.getActionCommand();

 

         if(label.equals("Datei laden"))

           dateiLaden();

 

         if(label.equals("Datei speichern"))

           dateiSpeichern();

 

         if(label.equals("Datei drucken"))

           dateiDrucken();

 

         if(label.equals("Programm beenden"))

           System.exit(0);             

         

         if(label.equals("String suchen"))

           stringSuchen(null, 0);     

          

         if(label.equals("Weitersuchen"))

           stringSuchen(suchstring, index);     

      }  

    }

 

    // Fenster schließen = Anwendung beenden

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

  

    // Die Instanz der Adapterklasse für den ActionListener

    // brauchen wir mehrmals, daher erzeugen wir nur eine Instanz                           

    // und verwenden sie mehrfach; das spart ein bißchen Speicher

    MeinActionLauscher  actionlistener =

                                       new MeinActionLauscher();

    item1_1.addActionListener(actionlistener);

    item1_2.addActionListener(actionlistener);

    item1_3.addActionListener(actionlistener);

    item1_4.addActionListener(actionlistener);

    item3_1.addActionListener(actionlistener);

    item3_2.addActionListener(actionlistener);

  

    // Genauso bei dem Lauschobjekt für die Items

    MeinItemAdapter itemlistener = new MeinItemAdapter();

    m_fonts.addItemListener(itemlistener);

    m_styles.addItemListener(itemlistener);

    m_farben.addItemListener(itemlistener);

 

    // Befehle für die Zwischenablage

    // erzeuge Action-Tabelle

    m_befehle = new Hashtable();

    Action[] actionsArray = m_textanzeige.getActions();

    for (int i = 0; i < actionsArray.length; i++) {

       Action a = actionsArray[i];

       m_befehle.put((String) a.getValue(Action.NAME), a);

    }

 

    item2_1.addActionListener(m_befehle.get(

                                  DefaultEditorKit.cutAction));

    item2_2.addActionListener(m_befehle.get(

                                  DefaultEditorKit.copyAction));

    item2_3.addActionListener(m_befehle.get(

                                  DefaultEditorKit.pasteAction));

 

  } // Ende von Konstruktor 'Editor'

 

    

  // Den aktuellen Font ermitteln

  // Methode von Editor

  void fontAktualisieren() {

    int fontstil;

    String farbe, fontname, style;

    int punktgröße;

  

    // Die zurzeit gesetzten Attribute ermitteln und setzen

    fontname = (String) m_fonts.getSelectedItem();

    style    = (String) m_styles.getSelectedItem();

    farbe    = (String) m_farben.getSelectedItem();

   

    if(farbe.equals("Schwarz"))

      m_textanzeige.setForeground(Color.black);

   

    if(farbe.equals("Rot"))                     

       m_textanzeige.setForeground(Color.red);     

     

    if(farbe.equals("Grün"))

      m_textanzeige.setForeground(Color.green);

 

    if(farbe.equals("Blau"))

      m_textanzeige.setForeground(Color.blue);

   

    if(farbe.equals("Magenta"))

      m_textanzeige.setForeground(Color.magenta);

   

    if(farbe.equals("yan"))

      m_textanzeige.setForeground(Color.cyan);

   

    if(farbe.equals("Gelb"))

      m_textanzeige.setForeground(Color.yellow);

   

 

    // Der Stil eines Fonts ist die Summe der Konstanten

    // PLAIN, ITALIC und BOLD

    fontstil = Font.PLAIN;

  

    if(style.equals("kursiv"))        

      fontstil += Font.ITALIC; 

  

    if(style.equals("fett"))

      fontstil += Font.BOLD;        

  

    // den neuen Font aktivieren

    m_textanzeige.setFont(new Font(fontname,fontstil,14));

     

  } // Ende von 'fontAktualisieren'

  

  

  // Eine Textdatei laden

  // Methode von Editor

  void dateiLaden() {

    JFileChooser dlg = new JFileChooser(".");

    int dialogRueckgabe = dlg.showOpenDialog(this);

 

    if (dialogRueckgabe == JFileChooser.APPROVE_OPTION)

    {

       // Benutzer hat den Dialog mit OK verlassen

       // -> ausgewählten Dateinamen übernehmen

       m_dateiname = dlg.getSelectedFile().getAbsolutePath();

 

       // Einen Eingabestream öffnen und die Datei laden

       StringBuffer lesepuffer= new StringBuffer(ZEILEN * SPALTEN);

       

       try (FileReader eingabe = new FileReader(m_dateiname);) {

              

         // so lange Zeichen lesen, bis das Dateiende ( = -1)

         // erreicht ist

         char zeichen;

         int gelesen;

         int zeilen = 0;

         boolean weiter = true;

     

         while(weiter) {

           gelesen = eingabe.read();

 

           if(gelesen == -1) {

              weiter = false;

              continue;

           }

 

           zeichen = (char) gelesen;

           lesepuffer.append(zeichen);

         }

 

         m_aktText = new String(lesepuffer);

         m_textanzeige.setText(m_aktText); 

         m_textanzeige.setCaretPosition(0);

       }

       catch(EOFException e) {

         // auf diese Exception haben wir ja gewartet

         // nichts weiter tun.

       }

       catch(FileNotFoundException e) {

         System.err.println(" Datei nicht vorhanden oder lesbar!\n");

         m_dateiname = null; 

       }

       catch(IOException e) {

         // Sonst irgendwas ist schiefgegangen

         System.err.println(" Fehler beim Lesen der Datei " +

                            m_dateiname + "\n");

         m_dateiname = null;

       }

     }

  } // Ende von 'dateiLaden'

 

 

  // Den aktuellen Text abspeichern

  // Methode von Editor

  void dateiSpeichern() {

    // lokale Variablen

    int zeichen,i;

 

    JFileChooser dlg = new JFileChooser(".");

    int dialogRueckgabe = dlg.showSaveDialog(this);

 

    if (dialogRueckgabe == JFileChooser.APPROVE_OPTION)

    {

       // Benutzer hat den Dialog mit OK verlassen

       // -> ausgewählten Dateinamen übernehmen

       m_dateiname = dlg.getSelectedFile().getAbsolutePath();

 

       // Den Text nun in der Datei speichern

       try (FileWriter ausgabe = new FileWriter(m_dateiname);) {

 

         // den aktuellen Text ermitteln und speichern

         m_aktText = m_textanzeige.getText();

    

         for(i = 0; i < m_aktText.length(); i++) {

            zeichen = (int) m_aktText.charAt(i);

            ausgabe.write(zeichen);

         }

       }

       catch(IOException e) {

         //  irgendwas ist schiefgegangen

         System.err.println(" Fehler beim Schreiben der Datei  "

                            + m_dateiname + "\n");

         m_dateiname = null;

       }

    }

  } // Ende von 'dateiSpeichern'

 

 

  // den aktuellen Text drucken

  // Methode von Editor

  void dateiDrucken() {

    if (m_dateiname == null)

      m_dateiname = "Unbenannt";

     

    try {

       m_textanzeige.print(new MessageFormat(m_dateiname),

                  new MessageFormat("Seite {0}"),

                  true,                            // Druckdialog anzeigen

                  null, null, false);

    } catch (PrinterException e) {

       System.err.println(" Drucken nicht moeglich.\n");

    }

  }

 

 

  // Diese Funktion sucht einen String im Text

  // Methode von Editor

  void stringSuchen(String suchstring, int index) {

    FrageDialog frage;

 

    // Prüfen, ob neue Suche

    // Wenn ja, Dialog aufrufen und Suchstring abfragen

    if (suchstring == null) {

       frage = new FrageDialog(this,"Suchen");

       frage.setLocation(150,150);

       frage.pack();

       frage.setVisible(true);

       suchstring = frage.getString();

       index = 0;

   

       if(suchstring == null)

          return;

    } else {

       // Suche hinter letztem gefundenen Vorkommen fortsetzen

       index += suchstring.length();

    }

       

    // nun suchen

    m_aktText = m_textanzeige.getText();

    index = m_aktText.indexOf(suchstring, index);

 

    if(index == -1) {

       JOptionPane.showMessageDialog(null,"String nicht gefunden",

                       "Meldung",JOptionPane.INFORMATION_MESSAGE);

       index = 0;

       suchstring = null;

    } else

       // Den String hervorheben

       m_textanzeige.select(index, index + suchstring.length() );

      

    // Suchstring und Position in Instanzvariablen speichern

    this.suchstring = suchstring;

    this.index = index;

 

  } // Ende von 'stringSuchen'

 

} // Ende von Klasse 'Editor'

 

 

// die Dialogklasse für die Eingabe des Suchstrings

class FrageDialog extends JDialog implements ActionListener {

  private JTextField eingabefeld;

  private JButton oK, abbruch;

  private String suchstring;

 

  // der Konstruktor

  FrageDialog(JFrame f, String titel) {

    super(f,titel,true);  // Konstruktor der Basisklasse aufrufen

    setResizable(false);

 

    setLayout(new BorderLayout());

 

    // es werden 2 Panels angelegt. Das eine enthält das TextField,

    // das andere die Schaltflächen

    JPanel panel1 = new JPanel();

    JLabel label = new JLabel("Bitte Suchstring eingeben:");

    panel1.add(label);

    eingabefeld = new JTextField(40);

    panel1.add(eingabefeld);

    add("Center",panel1);

 

    JPanel panel2 = new JPanel();

    oK = new JButton("OK");

    abbruch = new JButton("Abbrechen");

    panel2.add(oK);

    panel2.add(abbruch);

    add("South",panel2);

       

    pack();   // Anordnung der Oberflächenelemente auf bevorzugte

              // Größe initialisieren

 

    // die Mausbehandlung für die Schaltflächen  macht die Klasse

    // selbst, also bei sich selber registrieren

    oK.addActionListener(this);

    abbruch.addActionListener(this);

 

    // Fenster schließen = Fenster verbergen

    setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);

  }

 

  public void actionPerformed(ActionEvent e)  {

    String label;

 

    label = e.getActionCommand();

 

    if(label.equals("Abbrechen")) {

      suchstring = null;

      setVisible(false);

      return;

    }       

 

    if(label.equals("OK")) {

      suchstring = eingabefeld.getText();

      setVisible(false);

      return;

    }

  } // Ende von 'ActionPerformed'

 

  // Diese Funktion liefert den eingegebenen Suchstring zurück

  public String getString()  {      

    return suchstring;

  }

} // Ende von 'FrageDialog'

 

 


Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.