Hey Community,
hab da an einem Notepad Projekt gearbeitet und bin soweit eigentlich zufrieden.
Nur eine Sache funktioniert noch nicht - und zwar das Auschneiden, Kopieren und Einfügen über die Buttons in der Leiste.
Wäre super wenn Ihr mal drüber schaut und mir Helft. Ich weiß nicht weiter.
Wichtig ist eigentlich nur warum die letzte Methode nicht funktioniert.
Hier mein Code
	
	
	
	
	
		
	
Danke
			
			hab da an einem Notepad Projekt gearbeitet und bin soweit eigentlich zufrieden.
Nur eine Sache funktioniert noch nicht - und zwar das Auschneiden, Kopieren und Einfügen über die Buttons in der Leiste.
Wäre super wenn Ihr mal drüber schaut und mir Helft. Ich weiß nicht weiter.
Wichtig ist eigentlich nur warum die letzte Methode nicht funktioniert.
Hier mein Code
		Java:
	
	package de.fernschulen.minitext;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.print.PrinterException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Hashtable;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledEditorKit;
import javax.swing.text.html.HTMLEditorKit;
public class MiniText extends JFrame {
	//automatisch über Eclipse eingefügt
	private static final long serialVersionUID = -4622810145518216095L;
	
	//für das Eingabefeld
	private JEditorPane eingabeFeld;
	//für das Format
	//wir verwenden HTML
	private HTMLEditorKit htmlFormat;
	
	//für die Aktionen
	private MeineAktionen 	oeffnenAct, speichernAct, beendenAct, neuAct,infoAct,
							druckenAct, speichernUnterAct, webOeffnenAct, cutAct,
							copyAct, pasteAct;
	
	//für die Datei
	private File datei;
	
	//für das Kontext-Menü
	private JPopupMenu kontext;
	
	
    
		
	//eine innere Klasse für die Action-Objekte
	//Sie ist von der Klasse AbstractAction abgeleitet
	class MeineAktionen extends AbstractAction {
		//automatisch über Eclipse ergänzt
		private static final long serialVersionUID = 5736947176597361976L;
		
		//der Konstruktor
		public MeineAktionen(String text, ImageIcon icon, String bildschirmtipp, KeyStroke shortcut, String actionText) {
			//den Konstruktor der übergeordneten Klasse mit dem Text und dem Icon aufrufen
			super(text, icon);
			//die Beschreibung setzen für den Bildschirmtipp
			putValue(SHORT_DESCRIPTION, bildschirmtipp);
			//den Shortcut
			putValue(ACCELERATOR_KEY, shortcut);
			//das ActionCommand
			putValue(ACTION_COMMAND_KEY, actionText);
		}
		
		//die überschriebene Methode actionPerformed()
		
		
		
		public void actionPerformed(ActionEvent e) {
			if (e.getActionCommand().equals("neu"))
				dateiNeu();
			if (e.getActionCommand().equals("laden"))
				dateiLaden();
			if (e.getActionCommand().equals("speichern"))
				dateiSpeichern();
			if (e.getActionCommand().equals("beenden"))
				beenden();
			if (e.getActionCommand().equals("drucken")) {
				//wurde die Aktion über eine Schaltfläche gestartet?
				//dann direkt drucken
				if (e.getSource() instanceof JButton) 
					drucken(false);
				//wurde die Aktion über einen Menüeintrag gestartet?
				//dann erst den Dialog zeigen
				if (e.getSource() instanceof JMenuItem) 
					drucken(true);
			}
			if (e.getActionCommand().equals("speichernUnter"))
				dateiSpeichernUnter();
			if (e.getActionCommand().equals("webladen"))
				webLaden();
			if (e.getActionCommand().equals("information"))
				programmInfo();
			if (e.getActionCommand().equals("cutAction"))
				findAction(actions, DefaultEditorKit.cutAction);
			if (e.getActionCommand().equals("pasteAction"))
				findAction(actions, DefaultEditorKit.pasteAction);
			if (e.getActionCommand().equals("copyAction"))
				findAction(actions, DefaultEditorKit.copyAction);
											
		}
		
	}
	
	//eine innere Klasse mit dem Listener für das Kontext-Menü
	//sie ist von der Adapter-Klasse MouseAdapter abgeleitet
	class MeinKontextMenuListener extends MouseAdapter {
		@Override
		public void mouseReleased(MouseEvent e) {
			//die Methode der übergeordneten Klasse aufrufen
			super.mouseReleased(e);
			//wurde die Maustaste benutzt, die für das Anzeigen des Kontext-Menüs festgelegt ist?
			if (e.isPopupTrigger()) 
				//dann das Kontext-Menü anzeigen
				kontext.show(e.getComponent(), e.getX(), e.getY());
		}
	}
	
	//der Konstruktor der Klasse MiniText
	public MiniText(String text) {
		super(text);
		//wir nehmen ein Border-Layout
		setLayout(new BorderLayout());
		
		//die Aktionen erstellen
		neuAct = new MeineAktionen("Neu...", new ImageIcon("icons/New24.gif"), "Erstellt ein neues Dokument", KeyStroke.getKeyStroke('N',InputEvent.CTRL_DOWN_MASK), "neu");
		oeffnenAct = new MeineAktionen("Öffnen...", new ImageIcon("icons/Open24.gif"), "Öffnet ein vorhandenes Dokument", KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK),"laden");
		speichernAct = new MeineAktionen("Speichern", new ImageIcon("icons/Save24.gif"), "Speichert das aktuelle Dokument", KeyStroke.getKeyStroke('S',InputEvent.CTRL_DOWN_MASK), "speichern");
		beendenAct = new MeineAktionen("Beenden", null, "", null, "beenden");
		druckenAct = new MeineAktionen("Drucken...", new ImageIcon("icons/Print24.gif"), "Druckt das aktuelle Dokument", KeyStroke.getKeyStroke('P',InputEvent.CTRL_DOWN_MASK), "drucken");
		speichernUnterAct = new MeineAktionen("Speichern unter...", null, "", null, "speichernUnter");
		webOeffnenAct = new MeineAktionen("Webseite...", new ImageIcon("icons/WebComponent24.gif"), "Öffnet eine Webseite", null, "webladen");
		infoAct = new MeineAktionen("Info", new ImageIcon("icons/Information24.gif"), "Programminformationen", KeyStroke.getKeyStroke('I',InputEvent.CTRL_DOWN_MASK), "information");
		cutAct = new MeineAktionen("Cut", new ImageIcon("icons/Cut24.gif"), "Ausschneiden", KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK), "cutAction");
		copyAct = new MeineAktionen("Copy", new ImageIcon("icons/Copy24.gif"), "Kopieren", KeyStroke.getKeyStroke('C',InputEvent.CTRL_DOWN_MASK), "copyAction");
		pasteAct = new MeineAktionen("Paste", new ImageIcon("icons/Paste24.gif"), "Einfügen", KeyStroke.getKeyStroke('V',InputEvent.CTRL_DOWN_MASK), "pasteAction");
		
		
		//das Menü erzeugen
		menu();
		//die Symbolleiste oben einfügen
		add(symbolleiste(), BorderLayout.NORTH);
		//das Kontext-Menü erzeugen
		kontextMenu();
		//das Eingabefeld erzeugen und mit dem EditorKit verbinden 
		eingabeFeld = new JEditorPane();
		htmlFormat = new HTMLEditorKit();
		eingabeFeld.setEditorKit(htmlFormat);
		//das Eingabefeld mit dem Listener für das Kontext-Menü verbinden
		eingabeFeld.addMouseListener(new MeinKontextMenuListener());
		//gegebenenfalls mit Scrollbars in der Mitte einfügen
		add(new JScrollPane(eingabeFeld), BorderLayout.CENTER);
		
		//anzeigen und Standard-Verhalten festlegen
		//das Fenster ist maximiert
		setExtendedState(MAXIMIZED_BOTH);
		//die Mindestgröße setzen
		setMinimumSize(new Dimension(600,200));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		
		//das Eingabefeld bekommt den Fokus
		eingabeFeld.requestFocus();
	}
	
	//die Methode erstellt die Menüleiste
	private void menu() {
		JMenuBar menue = new JMenuBar();
		//das Menü Datei
		JMenu dateiMenue = new JMenu("Datei");
		JMenu hilfeMenue = new JMenu("Hilfe");
		
		//das Untermenü Öffnen
		//es ist vom Typ Menu, da es weitere Untereinträge haben soll
		JMenu dateiOeffnen = new JMenu("Öffnen");
		//die Einträge werden jetzt zum Untermenü hinzugefügt
		//das "normale" Öffnen
		dateiOeffnen.add(oeffnenAct);
		//das Öffnen aus dem Internet
		dateiOeffnen.add(webOeffnenAct);
		
		//die Einträge werden direkt über Action-Objekte erzeugt
		//der Eintrag Neu
		dateiMenue.add(neuAct);
		//das komplette Untermenü einfügen
		dateiMenue.add(dateiOeffnen);
		
		//der Eintrag Speichern
		dateiMenue.add(speichernAct);
		//der Eintrag Speichern unter
		dateiMenue.add(speichernUnterAct);
		
		//eine Trennlinie
		dateiMenue.addSeparator();
		//der Eintrag Drucken
		dateiMenue.add(druckenAct);
		
		//eine Trennlinie
		dateiMenue.addSeparator();
		//der Eintrag Beenden
		dateiMenue.add(beendenAct);
		
		//Das Hilfe Menu
		hilfeMenue.add(infoAct);
		
		//das gesamte Menü hinzufügen
		menue.add(dateiMenue);
		menue.add(hilfeMenue);
		this.setJMenuBar(menue);
	}
	
	//die Methode erstellt die Symbolleiste
	private JToolBar symbolleiste() {
		JToolBar leiste = new JToolBar();
		//die Symbole werden ebenfalls direkt über Action-Objekte erzeugt
		//das Symbol Neu
		leiste.add(neuAct);
		//das Symbol Öffnen
		leiste.add(oeffnenAct);
		//das Symbol für das Laden von Webseiten
		leiste.add(webOeffnenAct);
		//das Symbol Speichern
		leiste.add(speichernAct);
		//das Symbol Drucken
		leiste.add(druckenAct);
		//das Symbol für die Information			
		leiste.add(infoAct);
		//das Symbol cut
		leiste.add(cutAct);
		//das Symbol copy
		leiste.add(copyAct);
		//das Symabol Paste
		leiste.add(pasteAct);
		
		
		
		//etwas Platz einfügen
		leiste.addSeparator();
		//ein Symbol für die fette Zeichenformatierung
		//über eine Standard-Aktion aus dem StyledEditorKit
		//die neue Aktion erzeugen
		//Vorsicht! Es gibt mehrere Klassen Action
		//richtig ist die aus javax.swing
		Action fettFormat = new StyledEditorKit.BoldAction();
		//den Bildschirmtipp und das Symbol setzen
		fettFormat.putValue(Action.SHORT_DESCRIPTION, "Fett formatieren");
		//fettFormat.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/Bold24.gif"));
		//und zur Leiste hinzufügen
		leiste.add(fettFormat);
		
		//ein Symbol für die kursive Zeichenformatierung
		Action kursivFormat = new StyledEditorKit.ItalicAction();
		kursivFormat.putValue(Action.SHORT_DESCRIPTION, "Kursiv formatieren");
		//kursivFormat.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/Italic24.gif"));
		leiste.add(kursivFormat);
		
		//ein Symbol für die unterstrichene Zeichenformatierung
		Action unterstrichenFormat = new StyledEditorKit.UnderlineAction();
		unterstrichenFormat.putValue(Action.SHORT_DESCRIPTION, "Unterstrichen formatieren");
		//unterstrichenFormat.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/Underline24.gif"));
		leiste.add(unterstrichenFormat);
		
		//Platz einfügen
		leiste.addSeparator();
		
		//das Symbol für die linksbündige Ausrichtung
		//an den Konstruktor von StyledEditorKit.AlignmentAction() wird eine Beschreibung und die
		//gewünschte Ausrichtung übergeben
		Action linksAbsatz = new StyledEditorKit.AlignmentAction("Linksbündig", StyleConstants.ALIGN_LEFT);
		linksAbsatz.putValue(Action.SHORT_DESCRIPTION, "Linksbündig ausrichten");
		//linksAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/AlignLeft24.gif"));
		leiste.add(linksAbsatz);
		//das Symbol für die zentrierte Ausrichtung
		Action zentriertAbsatz = new StyledEditorKit.AlignmentAction("Zentriert", StyleConstants.ALIGN_CENTER);
		zentriertAbsatz.putValue(Action.SHORT_DESCRIPTION, "Zentriert ausrichten");
		//zentriertAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/AlignCenter24.gif"));
		leiste.add(zentriertAbsatz);
		//das Symbol für die rechtsbündige Ausrichtung
		Action rechtsAbsatz = new StyledEditorKit.AlignmentAction("Rechts", StyleConstants.ALIGN_RIGHT);
		rechtsAbsatz.putValue(Action.SHORT_DESCRIPTION, "Rechtsbündig ausrichten");
		//rechtsAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/AlignRight24.gif"));
		leiste.add(rechtsAbsatz);
		
		//das Symbol für den Blocksatz
		Action blockAbsatz = new StyledEditorKit.AlignmentAction("Blocksatz", StyleConstants.ALIGN_JUSTIFIED);
		blockAbsatz.putValue(Action.SHORT_DESCRIPTION, "Im Blocksatz ausrichten");
		//blockAbsatz.putValue(Action.LARGE_ICON_KEY, new ImageIcon("icons/AlignJustify24.gif"));
		leiste.add(blockAbsatz);
		
		//die komplette Leiste zurückgeben
		return (leiste);
	}
	
	//die Methode erstellt das Kontext-Menü
	private void kontextMenu() {
		//kontext ist eine Instanzvariable vom Typ JPopupMenu
		kontext = new JPopupMenu();
		//den Eintrag Neu hinzufügen
		kontext.add(neuAct);
		//die Einträge zum Öffnen
		kontext.add(oeffnenAct);
		kontext.add(webOeffnenAct);
	}
	//die Methode für die Funktion Neu
	private void dateiNeu() {
		//eine Abfrage
		if(JOptionPane.showConfirmDialog(this, "Wollen Sie wirklich ein neues Dokument anlegen?","Neues Dokument", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
			//den Text löschen
			eingabeFeld.setText("");
			//datei wieder auf null setzen, damit klar ist, dass die Datei noch nicht gespeichert wurde
			datei = null;
			setTitle("MiniText  " + "ohneName");
		}
	}
	//die Methode zum Laden einer Datei
	private void dateiLaden() {
		//für den Dialog
		MiniTextDialoge dialog = new MiniTextDialoge();
		
		//die Datei über den Dialog Öffnen beschaffen
		//es wird erst einmal in einer lokalen Variablen zwischengespeichert
		File dateiLokal = dialog.oeffnenDialogZeigen();
		
		//wenn eine Datei ausgewählt wurde, einlesen
		//die Methode read() erzwingt eine Ausnahmebehandlung
		if (dateiLokal != null) {
			
			try {
				eingabeFeld.read(new FileReader(dateiLokal), null);
				//datei neu setzen
				datei = dateiLokal;
				setTitle("MiniText  " + datei);
				
			}
			catch (IOException e) {
				JOptionPane.showMessageDialog(this, "Beim Laden hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
			}
		}
		
	}
	//die Methode zum Speichern einer Datei
	private void dateiSpeichern() {
		//WICHTIG!!!!
		//datei muss als Instanzvariable vereinbart werden
		//wenn die Datei noch nicht gespeichert wurde, ist datei noch null
		if (datei == null) {
			//für den Dialog
			MiniTextDialoge dialog = new MiniTextDialoge();
			//die Datei über den Dialog Speichern beschaffen
			datei = dialog.speichernDialogZeigen();
		}
		//ist datei ungleich null, dann wurde vorher schon einmal gespeichert
		//bzw. im Dialog eine Datei ausgewählt
		if (datei != null) {
			//die Ausnahmebehandlung ist zwingend erforderlich
			try {
				//den Output-Stream für die Datei beschaffen
				OutputStream output = new FileOutputStream(datei);
				//das Dokument komplett speichern
				htmlFormat.write(output, eingabeFeld.getDocument(), 0, eingabeFeld.getDocument().getLength());
			}
			catch (IOException e) {
				JOptionPane.showMessageDialog(this, "Beim Speichern hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
			}
			catch (BadLocationException e) {
				JOptionPane.showMessageDialog(this, "Beim Speichern hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
			}
		}
	}
	
	//die Methode öffnet den Speichern-Dialog und ruft die Methode dateiSpeichern() auf,
	//wenn ein neuer Name ausgewählt wurde
	private void dateiSpeichernUnter() {
		//für den Dialog
		MiniTextDialoge dialog = new MiniTextDialoge();
		//die Datei über den Dialog Speichern beschaffen
		File dateiLokal = dialog.speichernDialogZeigen();
		//ist dateiLokal ungleich null, dann wurde ein neuer Name ausgewählt
		if (dateiLokal != null) {
			datei = dateiLokal;
			dateiSpeichern();
		}
	}
	
	
	//die Methode beendet die Anwendung nach einer Abfrage
	private void beenden() {
		if(JOptionPane.showConfirmDialog(this, "Sind Sie sicher?","Anwendung schließen", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
			System.exit(0);
	}
	
	//die Methode druckt das Dokument
	//wenn dialogZeigen true ist, wird erst der Drucken-Dialog eingeblendet
	private void drucken(boolean dialogZeigen) {
		try {
			if (dialogZeigen == true)
				//mit Dialog drucken
				eingabeFeld.print();
			else
				//ohne Dialog drucken
				//dazu muss das dritte Argument false sein
				eingabeFeld.print(null, null, false, null, null, true);
			}
		catch (PrinterException e) {
			JOptionPane.showMessageDialog(this, "Beim Drucken hat es ein Problem gegeben.", "Fehler", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	//die Methode öffnet ein Dokument aus dem Internet
	private void webLaden() {
		//für die URL
		String adresse;
		//einen Dialog zur Eingabe erzeugen
		adresse = JOptionPane.showInputDialog(this, "Bitte geben Sie die URL der Seite ein:");
		//wurde etwas eingegeben?
		if (adresse != null) {
			//den Text im Feld löschen
			eingabeFeld.setText("");
			try {
				//den Inhalt anzeigen
				eingabeFeld.setPage(adresse);
					setTitle("MiniText  " + adresse);}
					
			catch (IOException e) {
				JOptionPane.showMessageDialog(this, "Beim Laden ist ein Problem aufgetreten.");
			}
			
		}
		
		
	}
	
	private void programmInfo() {
		JOptionPane.showMessageDialog(this, "MiniText Version 1.0. Programmiert von: Sven Reitz");
	}
	
	
	private static Action findAction(Action actions[], String key) {
	    Hashtable<Object, Action> commands = new Hashtable<Object, Action>();
	    for (int i = 0; i < actions.length; i++) {
	      Action action = actions[i];
	      commands.put(action.getValue(Action.NAME), action);
	    }
	    return commands.get(key);
	  }
	
	
	
}Danke
			
				Zuletzt bearbeitet von einem Moderator: 
			
		
	
								
								
									
	
								
							
							 
				 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		