Markierten Mausbereich erfassen, Text beim Cursor platzieren

Status
Nicht offen für weitere Antworten.

tortelinski

Mitglied
Ich muss in meinem Editor noch Cut-/Copy- und Paste- reinimplementieren, dazu habe ich folgende Listener erstellt die ich im Internet fertig fand, diese laufen alle, allerdings immer in Bezug auf das Gesamttextfeld!

Jetzt brauche ich noch Befehle die den markierten Mausbereich bei cut/copy ausschneiden/kopieren und ein Befehl der den Text beim Mauscursor plaziert! Mit MausListener kenne ich mich ned aus!

Code:
private class CutActionListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
        	String aString =textPane.getText();
        	StringSelection stringSelection = new StringSelection( aString );
            clipboard.setContents( stringSelection, stringSelection );
        }
    	}
        private class CopyActionListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
        	String aString =textPane.getText();
        	StringSelection stringSelection = new StringSelection( aString );
            clipboard.setContents( stringSelection, stringSelection );
        }   
        }
    private class PasteActionListener implements ActionListener {
        public void actionPerformed(ActionEvent event) {
        	String result = "";
            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
            //odd: the Object param of getContents is not currently used
            Transferable contents = clipboard.getContents(null);
            boolean hasTransferableText =
              (contents != null) &&
              contents.isDataFlavorSupported(DataFlavor.stringFlavor)
            ;
            if ( hasTransferableText ) {
              try {
                result = (String)contents.getTransferData(DataFlavor.stringFlavor);
              }
              catch (UnsupportedFlavorException ex){
                //highly unlikely since we are using a standard DataFlavor
                System.out.println(ex);
                ex.printStackTrace();
              }
              catch (IOException ex2) {
                System.out.println(ex2);
                ex2.printStackTrace();
              }
            }
            textPane.setText(result);
        }
        }

Was noch schöner wäre: Text und Bild schneiden, kopieren und einpassen!!! Geht sowas? Mit Text und Bild? Wie? Wir programmieren im Softwarepraktikum ein Keynotesystem, das Bilder, Text und Urls verwalten kann!!! Und ich muss nen HTML-Editor bereitstellen. Ich schick Dir gerne mal den Status quo! Meine Mail band-ulm@gmx.de

Denn meine nächste Frage wäre, wie bekomme ich das Zeug im Editor Feld in eine Schnittstelle?
 

tortelinski

Mitglied
Noch schöner wäre es, wenn zumindest die Textformation erhalten bliebe! Textformat und Bilder wären natürlich die Krönung!!!
 

Ariol

Top Contributor
Ein Besipiel mit STRG+C Die anderen Sachen wirst du vermutlich selbst hinbekommen ;)

Code:
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;

class Manager
{
	static int markedfrom = 0;
	static int markedto = 0;
	static String textBuffer = "";
	
	public static void main(String args[])
	{
		final JTextPane jtp = new JTextPane();
		jtp.addCaretListener(new CaretListener()
		{

			public void caretUpdate(CaretEvent arg0) 
			{
				int dot = arg0.getDot();
				int mark = arg0.getMark();
				
				if(dot < mark)
				{
					markedfrom = dot;
					markedto = mark;
				}
				else
				{
					markedfrom = mark;
					markedto = dot;
				}
				
				System.out.println("from: " + markedfrom  +" to: " + markedto);
			}
			   
		});
		
		jtp.addKeyListener(new KeyListener()
		{

			public void keyPressed(KeyEvent arg0) 
			{
				if((arg0.getKeyCode() == KeyEvent.VK_C && arg0.isControlDown()) && markedfrom!=markedto)
				{
					try 
					{
						textBuffer = jtp.getText(markedfrom, markedto);
					}
					catch (BadLocationException e) 
					{
						e.printStackTrace();
					}
					
					System.out.println(textBuffer);
				}
			}

			public void keyReleased(KeyEvent arg0) {
				// TODO Auto-generated method stub
				
			}

			public void keyTyped(KeyEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
		});
		
		JFrame f = new JFrame();
		f.setPreferredSize(new Dimension(200,200));
		f.add(jtp);
		f.pack();
		f.setVisible(true);
		
	}
}
 

tortelinski

Mitglied
Für was ist die Klasse Manager jetzt gut, ich habe mir sie angeschaut, verstehe aber den Sinn dahinter nicht so richtig???
 

tortelinski

Mitglied
Also: Ich habe jetzt mal die Klasse "Manager" getestet, die Klasse printet immer den Bereich aus, der gerade markiert ist im Frame, :D d.h. ich muss die Komponenten der Klasse irgendwie :?: in mein Programm übertragen... :?:
 

tortelinski

Mitglied
Deinen letzten Tipp habe ich schon in meiner Implementierung drin!!! Wenn Du mal meine Implementierung anschaust. Da fehlt nur noch bei den ActionListenern für Cut and Copy eine passende Implementierung für den markierten Bereich....siehe oben!

Nur wie soll das mit dem textBuffer gehen? Muss ich die Class Manager extra zu meinem Programm hinzufügen oder muss ich Teile davon in mein Programm reinkopieren? Im Kern liefert Manager das, was ich suche, nur wie reinbekommen, ich habs mit kopieren versucht, das gibt aber Chaos ins Programm...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben