//Java-Klassenpaket importieren
java.awt.* importieren;
import java.awt.event.*;
javax.swing.* importieren;
import java.io.*;
Klasse EditFile
{
//Standardkonstruktor
EditFile(){}
//Dateifunktion speichern
void SaveFile(String name,String str)
{
versuchen
{
//Dateiausgabeobjekt deklarieren
FileOutputStream fos = new FileOutputStream(name);
//Speicherdatei ausgeben
fos.write(str.getBytes());
}
Catch (IOException e)
{
//Es tritt ein Fehler auf und es wird eine Fehlermeldung ausgegeben
System.out.println(e.toString());
}
}
//Dateifunktion öffnen
String OpenFile(Stringname)
{
//Definieren Sie die Zeichenfolge str, um den Dateiinhalt zu speichern
String str=null;
//Zähler definieren
int ch=0;
versuchen
{
//Deklarieren Sie das Dateieingabeobjekt
FileInputStream fis = new FileInputStream(name);
// Durchlaufe das Eingabeobjekt und speichere den Speicher in str
while ((ch=fis.read())!=-1)
{
str=str+(char)ch;
}
//Schließe das Dateiobjekt
fis.close();
}
Catch (IOException e)
{
//Es tritt ein Fehler auf und es wird eine Fehlermeldung ausgegeben
System.out.println(e.toString());
}
//return str
return str;
}
}
Klasse MyMainFrame erweitert JFrame implementiert ActionListener
{
//Dateiname
String filename=null;
//Zeichenfolge finden
String findtxt=null;
//Zeichenfolge ersetzen
String replacetxt=null;
//Finde die Startposition
int findtxton=-1;
//Finde das Endbit
int findtxtoff=-1;
//Mittelfeld
Container c=getContentPane();
//Speisekarte
JMenuBar mainMb=new JMenuBar();
//Menütaste
JMenu fileMenu=new JMenu("File");
JMenu editMenu=new JMenu("Edit");
JMenu typeMenu=new JMenu("format");
JMenuItem newItem=new JMenuItem("New");
JMenuItem openItem=new JMenuItem("open");
JMenuItem saveItem=new JMenuItem("Save");
JMenuItem saveasItem=new JMenuItem("Speichern unter");
JMenuItem exitItem=new JMenuItem("Exit");
JMenuItem findItem=new JMenuItem("Find");
JMenuItem findnextItem=new JMenuItem("Weitersuchen");
JMenuItem changeItem=new JMenuItem("replace");
JCheckBoxMenuItem changelineItem=new JCheckBoxMenuItem("Automatischer Zeilenumbruch",false);
//Textfeld
JTextArea txt=new JTextArea();
JTextArea txt2=new JTextArea();
//Bildlaufleiste
JScrollPane jsp;
//Dateioperationsobjekt
EditFile ef=new EditFile();
//Konstrukteur
MyMainFrame()
{
//Schnittstelle zeichnen
c.setLayout(new BorderLayout());
jsp= new JScrollPane(txt);
jsp.setHorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_AS_NEEDED);
c.add(jsp,BorderLayout.CENTER);
mainMb.add(fileMenu);
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(saveasItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
mainMb.add(editMenu);
editMenu.add(findItem);
editMenu.add(findnextItem);
editMenu.add(changeItem);
mainMb.add(typeMenu);
typeMenu.add(changelineItem);
setJMenuBar(mainMb);
//Ereignisüberwachung für das Menü hinzufügen
newItem.addActionListener(this);
openItem.addActionListener(this);
saveItem.addActionListener(this);
saveasItem.addActionListener(this);
exitItem.addActionListener(this);
findItem.addActionListener(this);
findnextItem.addActionListener(this);
changeItem.addActionListener(this);
changelineItem.addActionListener(this);
}
//Ereignishandlerfunktion
public void actionPerformed(ActionEvent e)
{
//Erstelle ein Dateioperationsobjekt
EditFile ef=new EditFile();
//Wenn auf die Schaltfläche geklickt wird, ist sie neu
if(e.getActionCommand()=="Neu")
{
//Das Textfeld auf leer setzen
txt.setText(null);
//Der Dateiname ist leer
Dateiname=null;
}
//Wenn die Schaltfläche zum Öffnen angeklickt wird
if(e.getActionCommand()=="open")
{
//Definieren Sie ein Dateiformular
FileDialog openDialog=new FileDialog(this,"Datei öffnen...",FileDialog.LOAD);
//Formular anzeigen
openDialog.show();
//Wenn die zurückgegebene Datei nicht leer ist
if(openDialog.getFile()!=null)
{
//Den Dateinamen abrufen
Dateiname=openDialog.getFile();
//Dateiinhalt abrufen
txt.setText(ef.OpenFile(openDialog.getFile()));
}
}
//Wenn die Schaltfläche zum Speichern angeklickt wird
if(e.getActionCommand()=="Speichern")
{
//Wenn kein Dateiname vorhanden ist
if(filename==null)
{
//Definieren Sie ein Dateiformular
FileDialog saveDialog=new FileDialog(this,"Speichern unter...",FileDialog.SAVE);
//Formular anzeigen
saveDialog.show();
//Wenn die zurückgegebene Datei nicht leer ist
if(saveDialog.getFile()!=null)
{
//Den Dateinamen abrufen
Dateiname=saveDialog.getFile();
//Datei speichern
ef.SaveFile(filename,txt.getText());
}
}
anders
{
//Datei direkt speichern
ef.SaveFile(filename,txt.getText());
}
}
//Wenn Sie auf die Schaltfläche zum Speichern unter klicken
if(e.getActionCommand()=="Speichern unter")
{
//Definieren Sie ein Dateiformular
FileDialog saveDialog=new FileDialog(this,"Speichern unter...",FileDialog.SAVE);
//Formular anzeigen
saveDialog.show();
//Wenn die zurückgegebene Datei nicht leer ist
if(saveDialog.getFile()!=null)
{
//Den Dateinamen abrufen
Dateiname=saveDialog.getFile();
//Datei speichern
ef.SaveFile(filename,txt.getText());
}
}
//Wenn die Schaltfläche zum Beenden angeklickt wird
if(e.getActionCommand()=="Beenden")
{
//aufhören
System.exit(0);
}
//Wenn auf die Schaltfläche geklickt wird, handelt es sich um eine Suche
if(e.getActionCommand()=="Find")
{
//Definieren Sie ein Dialogfeld
JOptionPane inputdia=new JOptionPane();
//Dialogfeld definieren, um Suchtext abzurufen
findtxt=inputdia.showInputDialog("Bitte geben Sie den Text ein, den Sie suchen möchten",null);
//Definieren Sie die tatsächlichen Koordinaten
findtxton=-1;
findtxtoff=-1;
//Rufen Sie die Suchfunktion auf
finden();
}
//Wenn Sie auf die Schaltfläche klicken, finden Sie den nächsten
if(e.getActionCommand()=="Weitersuchen")
{
//Rufen Sie die Suchfunktion auf
finden();
}
//Wenn auf die Schaltfläche geklickt wird, ersetzen
if(e.getActionCommand()=="replace")
{
//Definieren Sie ein Dialogfeld
JOptionPane inputdia=new JOptionPane();
//Text suchen und ersetzen abrufen
findtxt=inputdia.showInputDialog("Bitte geben Sie den zu ersetzenden Text ein",null);
replacetxt=inputdia.showInputDialog("Bitte geben Sie den ersetzten Text ein",null);
//Inhalt sichern
txt2.setText(replacetxt);
txt2.selectAll();
txt2.copy();
//Rufen Sie die Suchfunktion auf
finden();
//falls nicht gefunden
if(findtxton==-1&&findtxtoff==-1)
{
}
//Wenn gefunden
anders
{
//ersetzen
txt.paste();
}
findtxton=-1;
findtxtoff=-1;
}
//Wenn auf die Schaltfläche geklickt wird, wird sie automatisch umbrochen
if(e.getActionCommand()=="Automatischer Zeilenumbruch")
{
//Beurteilen Sie den aktuellen Status
if(changelineItem.isSelected()==true)
{
//Legen Sie den Status der Bildlaufleiste fest
jsp.setHorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_NEVER);
//Legen Sie fest, ob umgebrochen werden soll oder nicht
txt.setLineWrap(true);
}
anders
{
jsp.setHorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_AS_NEEDED);
txt.setLineWrap(false);
}
}
}
//Funktion finden
öffentliche Leere find()
{
//Temporäre Zeichenfolge definieren
String tempstr;
//Text suchen, wenn er nicht leer ist
if(findtxt!=null)
{
versuchen
{
//Suchen
tempstr=txt.getText(findtxton+1,(txt.getText().length()-findtxton-1));
findtxton=findtxton+1+tempstr.indexOf(findtxt);
}
Catch (Ausnahme e)
{
}
//Wenn sich das Startbit ändert, wird es gefunden
if(findtxton!=-1)
{
//Endbit setzen
findtxtoff=findtxton+findtxt.length();
}
anders
{
//Andernfalls wird „nicht gefunden“ angezeigt
findtxtoff=-1;
JOptionPane.showMessageDialog(null,"Nicht gefunden");
}
//Wählen Sie das gefundene Teil aus
txt.select(findtxton,findtxtoff);
}
}
}
öffentliche Klasse TextEdit
{
//Hauptfunktion
public static void main(String args[])
{
//Deklaration zum Festlegen des Hauptformulars
MyMainFrame f=new MyMainFrame();
f.setSize(640,480);
f.setTitle("Texteditor");
//Zeigt das Hauptformular an
f.setVisible
(true);
}
/*
Probleme mit dem automatischen Zeilenumbruch von JTextArea
-------------------------------------------------- ----------------------------------
Wenn die horizontale Bildlaufleiste auf JSctollpane eingestellt ist.
, dann verfügt die JTextArea mit diesem hinzugefügten JSctollpane-Objekt über die Zeilenumbruchfunktion, oder?
-------------------------------------------------- -----------
JTextArea.setLineWrap(boolean wrap)
------------- ---- ---------------------------------------------- ---- --------------
JTextArea.setLineWrap(boolean wrap)//Allgemeiner Zeilenumbruch.
JTextArea.setWrapStyleWorld(boolean world)//Zeilen umbrechen, indem Wortkanten als Grenzen verwendet werden
*/