Results 1 to 5 of 5
  1. #1
    bones is offline Member
    Join Date
    Jul 2009
    Posts
    2
    Rep Power
    0

    Default Copy, Cut and Paste Problems!

    Hey to all,

    i am here for the first time and i hope you can help me out.
    I tried to implement the DefaultEditorKid in my Programm but it does not work.
    I made 3 Buttons for the copy cut and paste but it wont work.
    Everything is fine-only the last Method in my Programm does not work.

    I am happy if you can help me!

    Thx for coop!


    Here is my class! At the buttom you can find the Method with problems!




    code:
    Java Code:
    public class MiniText extends JFrame {
     
        //automatisch über Eclipse eingefügt
        private static final long serialVersionUID = -4622810145518216095L;
     
        
        //für das Eingabefeld
        public 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, pasteAction, 
                                copyAction, cutAction;
        
        //für die Datei
        private File datei;
        
        //für das Kontext-Menü
        private JPopupMenu kontext;
        
        private Action[] actions;
        
        
        
        
            
        //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("ausschneiden"))
                    findAction(actions, DefaultEditorKit.cutAction);
                    if (e.getActionCommand().equals("kopieren"))
                        findAction(actions, DefaultEditorKit.copyAction);
                        if (e.getActionCommand().equals("einfuegen"))
                            findAction(actions, DefaultEditorKit.pasteAction);  
            }               
            
        }
        
        //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");
            cutAction = new MeineAktionen("Cut", new ImageIcon("icons/Cut24.gif"), "Ausschneiden", KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK), "ausschneiden");
            copyAction = new MeineAktionen("Copy", new ImageIcon("icons/Copy24.gif"), "Kopieren", KeyStroke.getKeyStroke('C',InputEvent.CTRL_DOWN_MASK), "kopieren");
            pasteAction = new MeineAktionen("Paste", new ImageIcon("icons/Paste24.gif"), "Einfügen", KeyStroke.getKeyStroke('V',InputEvent.CTRL_DOWN_MASK), "einfuegen");
            
            
     
            //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());    
            
            actions  = eingabeFeld.getActions();
            
            //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(cutAction);
            //das Symbol copy
            leiste.add(copyAction);
            //das Symabol Paste
            leiste.add(pasteAction);
            
            
            
            //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.");
        }
        
            
        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);
          }
        
        
        
    }
    Last edited by Fubarable; 07-16-2009 at 10:53 PM. Reason: Code Tags Added

  2. #2
    Fubarable's Avatar
    Fubarable is offline Moderator
    Join Date
    Jun 2008
    Posts
    19,315
    Blog Entries
    1
    Rep Power
    26

    Default

    Hello, and welcome to the forum.

    Just a bit of advice: when posting code here, please use code tags so that your code will retain its formatting and thus will be readable -- after all, your goal is to get as many people to read your post and understand your code as possible, right?

    To do this, highlight your pasted code (please be sure that it is already formatted when you paste it into the forum; the code tags don't magically format unformatted code) and then press the code button, and your code will have tags.

    Another way to do this is to manually place the tags into your code by placing the tag [cod&#101;] above your pasted code and the tag [/cod&#101;] below your pasted code like so:

    Java Code:
    [cod&#101;]
      // your code goes here
      // notice how the top and bottom tags are different
    [/cod&#101;]
    I have taken the liberty to add code tags to your post. Best of luck at finding a solution!

  3. #3
    hardwired's Avatar
    hardwired is offline Senior Member
    Join Date
    Jul 2007
    Posts
    1,576
    Rep Power
    9

    Default

    Works okay now. Try this as is.
    Attached Files Attached Files

  4. #4
    Fubarable's Avatar
    Fubarable is offline Moderator
    Join Date
    Jun 2008
    Posts
    19,315
    Blog Entries
    1
    Rep Power
    26

    Default

    Cripes Hardwired, do you understand German too?

  5. #5
    bones is offline Member
    Join Date
    Jul 2009
    Posts
    2
    Rep Power
    0

Similar Threads

  1. Cut, copy and Paste in JTextPane
    By Gudradain in forum AWT / Swing
    Replies: 1
    Last Post: 01-03-2009, 07:43 AM
  2. Problems with copy paste
    By fredand44 in forum Eclipse
    Replies: 0
    Last Post: 12-17-2008, 05:14 PM
  3. How to copy and paste data with the clipboard
    By Java Tip in forum SWT Tips
    Replies: 0
    Last Post: 07-07-2008, 05:35 PM
  4. Replies: 0
    Last Post: 02-06-2008, 04:55 PM
  5. java copy paste cut and undo functions
    By Mr tuition in forum AWT / Swing
    Replies: 1
    Last Post: 12-09-2007, 01:02 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •