JavaFX Editor Probleme mit der Zwischenablage

eiligerwind

Mitglied
Guten Morgen Forengemeinde,

ich habe ein Problem mit einer JavaFX Editor Anwendung. Die Anwendung ist Teil eines Kurses gewesen, bei dem die Funktionen Öffnen/Speichern/Laden per Code vorgegeben waren und zu dem nun noch die Funktionen Cut/Copy und Paste ergänzt werden sollten. Den vollständigen Code (zunächst ohne Kommentierung der zusätzlichen Funktionen findet ihr unten.

Die Methoden Cut/Copy und Paste werden aus der Klasse TextArea genutzt. Das funktioniert auch soweit. Allerdings wird beim Starten des Programms wenn ich die Cut erstmalig aufrufe, das gewünschte zwar ausgeschnitten, allerdings beim Einfügen wird etwas aus der vorherigen Zwischenablage eingefügt... beim nochmaligen nutzen der Cut Funktion funktioniert es wie gewollt. Ich denke man müsste beim Aufruf des Programms vermutlich die Zwischenablage leeren. Aber wie mach ich das? oder liegt der Fehler möglicherweise ganz woanders?

hier der Code:
[CODE lang="java" title="FXML Controller"]package texteditor;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.TextArea;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;




public class FXMLControllerTest {

@FXML private TextArea editor ;

private Stage meineStage;

//die Methode zum Beenden
@FXML protected void beendenKlick(ActionEvent event) {
Platform.exit();
}

@FXML protected void ladenKlick(ActionEvent event) {

FileChooser oeffnenDialog = new FileChooser();

//oeffnenDialog.setInitialDirectory(new File(System.getProperty("user.home")));
//den Titel für den Dialog setzen
oeffnenDialog.setTitle("Datei öffnen");
//den Filter setzen
oeffnenDialog.getExtensionFilters().add(new ExtensionFilter("Textdateien", "*.txt"));
//den oeffnenDialog anzeigen und das Ergebnis beschaffen
File datei = oeffnenDialog.showOpenDialog(meineStage);
//wurde eine Datei ausgewählt
if (datei !=null)
//dann den Inhalt der Datei über eine eigene Methode lesen
editor.setText(datenLesen(datei));
}

@FXML protected void neuKlick(ActionEvent event) {
Alert meinDialog = new Alert (AlertType.INFORMATION, "Die Daten werden gelöscht");
meinDialog.setHeaderText("Bitte beachten");
meinDialog.showAndWait();
editor.clear();

}

//die Methode zum Laden der sie enthält die Datei die geladen werden soll
//und liefert eine Zeichenkette mit dem Inhalt zurück
private String datenLesen(File dateiLesen) {
//gelesen wird als INT!
int zeichen = 0;
StringBuilder text = new StringBuilder();
//eine Instanz mider Klasse FileReader mit der Datei erzeugen
try(FileReader tempDatei = new FileReader(dateiLesen)) {
//solange das Ende der Datei nicht erreicht ist, werden die
//Zeichen einzeln gelesen und in einem StringBuilder angehängt
zeichen = tempDatei.read();
while (zeichen !=-1) {
//zeichen werden in den Typ char umgewandelt
text.append((char)zeichen);
zeichen=tempDatei.read();
}
}
catch (IOException e) {
System.out.println("Beim Laden ist ein Problem aufgetreten");
}

return (text.toString());
}

//die Methode zum Anzeigen des Speicherndialogs
@FXML protected void speichernKlick (ActionEvent event) {
//eine neue Instanz der Klasse FileChooser erzeugen
FileChooser speichernDialog = new FileChooser();
//den Titel für den Dialog setzen
speichernDialog.setTitle("Datei speichern");
//den Filter setzen
speichernDialog.getExtensionFilters().addAll(new ExtensionFilter("Textdateien", "*.txt"));
//den Speichern Dialog anzeigen und das Ergebnis beschaffen
File datei = speichernDialog.showSaveDialog(meineStage);
//wurde eine Datei ausgewählt
if (datei!=null)
//dann den Inhalt über eine eigene Methode speichern
datenSchreiben(datei);
}
//die Methode zum schreiben
//sie enthält die Datei die geschrieben werden soll
private void datenSchreiben (File dateiSchreiben) {
//eine Instanz der Klasse FileWriter mit der Datei erzeugen
try (FileWriter tempDatei =new FileWriter (dateiSchreiben)) {
//der Inhalt des Textfeldes wird direkt in die Datei geschrieben
tempDatei.write(editor.getText());
}
catch (IOException e) {
System.out.println("Beim Schreiben ist ein Problem aufgetreten");
}
}

@FXML protected void ausschneidenKlick (ActionEvent e) {
editor.cut();
}

@FXML protected void kopierenKlick (ActionEvent e) {
editor.copy();
}

@FXML protected void einfügenKlick (ActionEvent e) {
editor.paste();
}

public void setMeineStage(Stage meineStage) {
this.meineStage = meineStage;
}
}
[/CODE]

und Launch des Programms:

[CODE lang="java" title="Launch"]package texteditor;

//Einsendeaufgabe 3

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class TextEditorLaunch extends Application{
@Override
public void start(Stage meineStage) throws Exception {
//eine Instanz von FXMLLoader erzeugen
FXMLLoader meinLoader = new FXMLLoader(getClass().getResource("TextEditor.fxml"));
//die Datei laden
Parent root = meinLoader.load();
//den Controller beschaffen
FXMLControllerTest meinController = meinLoader.getController();
//und die Bühne übergeben
meinController.setMeineStage(meineStage);
//die Szene erzeugen
//an den Konstruktor werden der oberste Knoten und die Größe übergeben
Scene meineScene = new Scene(root, 400, 400);
//den Titel über stage setzen
meineStage.setTitle("Editor");
//die Szene setzen
meineStage.setScene(meineScene);
//im Vollbild darstellen
meineStage.setMaximized(true);
//und anzeigen
meineStage.show();
}

public static void main(String[] args) {
//der Start
launch(args);
}
}
[/CODE]
 

eiligerwind

Mitglied
Hallo gogcho, ja das Problem wurde gelöst. Aus dem Stehgreif habe ich die Lösung nicht mehr parat, kann aber bei Interesse mal nachschauen...Code müsste ich noch rumliegen haben :)
VG eiligerwind
 

gogcho

Mitglied
Ich wäre sehr dankbar wenn du mir verraten könntest wie das zu lösen ist. Ich habe genau das gleiche Problem und nur in deinem Beitrag hier stehts genau so formuliert wie ich es auch brauche :/
 

eiligerwind

Mitglied
Hm habe gerade nochmals meine alte Aufgabe und den oben geposteten Code verglichen. Der oben stehende sollte schon funktionieren. Wenn der Editor gestartet wird, ist zwar die Zwischenablage möglicherweise nicht leer, dennoch sollte die cut Methode mit anschließenden Paste auch mit dem oben gezeigten Code funktionieren.
 

gogcho

Mitglied
Ja also ich habe es genau so auch gemacht, aber das Problem taucht immer wieder auf. Nach dem cut() sind mehrere pastes möglich, was nicht sein soll. Hast du dann die Zwischenablage selber “gecleart” nach dem Paste ? Weil dann muss man herausfinden ob zuerst auf cut oder copy gedrückt wurde
 
K

kneitzel

Gast
Ja also ich habe es genau so auch gemacht, aber das Problem taucht immer wieder auf. Nach dem cut() sind mehrere pastes möglich, was nicht sein soll. Hast du dann die Zwischenablage selber “gecleart” nach dem Paste ? Weil dann muss man herausfinden ob zuerst auf cut oder copy gedrückt wurde
Aber das ist doch das normale und erwartete Verhalten: Die Zwischenablage kann mehrfach eingefügt werden.

Daher wundert mich die Anforderung, dass nach einem Paste die Zwischenablage leer sein soll etwas. Das ist eine Anforderung, die so definiert worden ist?
 

eiligerwind

Mitglied
hmm... das stimmt, nach dem Cut kannst Du beliebig oft das ausgeschnittenen einfügen. Es war aber Aufgabenseitig auch nicht explizit gefordert, dass eine erneutes Paste unterdrückt werden sollte. Ich habe damals nur das Problem gehabt, dass bei mir nicht das ausgeschnittene eingefügt wurde, sondern beim erstmaligen Aufruf, dass aus der Zwischenablage noch vorhandene Textauschnitt...das sollte bei oben angegegebenen Code aber nicht mehr der Fall sein.
 

gogcho

Mitglied
Also nach dem cut() und dann paste() sollte kein paste mehr möglich sein. Bei mir ist das Problem dass ich den gecutteten Textausschnitt wieder pasten kann, was eigentlich nicht sein soll
 

eiligerwind

Mitglied
Das ist doch aber das Standardverhalten in jeder Anwendung...nimm z.b. Word auch hier kannst Du das ausgeschnittenen mehrfach einfügen...
Ist das Explizit in der Aufgabenstellung so genannt? wäre komisch...
 
K

kneitzel

Gast
Also nach dem cut() und dann paste() sollte kein paste mehr möglich sein. Bei mir ist das Problem dass ich den gecutteten Textausschnitt wieder pasten kann, was eigentlich nicht sein soll
Also wenn das in der Aufgabenstellung explizit so gefordert ist, dann müsste man erst einmal das Verhalten der Applikation etwas näher erläutern.

Wann ist ein Paste gestattet bzw. was darf alles passieren?
Beispiele:
Ich kopiere etwas außerhalb der JavaFX Applikation: Darf ich das einfügen? Einmalig? Mehrmalig?
Ich kopiere/schneide aus etwas innerhalb der JavaFX Applikation - das darf nur einmal eingefügt werden?
Ich kopiere/schneide aus - und das zwei Mal hintereinander -> Wie ist hier das Verhalten? Erste Operation wird vergessen? Oder haben wir eine Art Stack von so Operationen und ich kann zwei Mal einfügen? Welche Reihenfolge? Sind die Elemente in einer Schlange (FIFO, first in, first out) oder liegen sie auf einem Stapel (First in, last out)?
Wie ist das Verhalten außerhalb? Darf ich etwas in der JavaFX kopieren und außerhalb einfügen? Wie sollen hier die Regeln aussehen? (=> Hier wird es sehr schwer, denn wir können hier nicht wirklich viel eingreifen. Vor allem bei Erweiterungen - es gibt Betriebssystem Erweiterungen, die mehrere Zwischenablagen merken. Also selbst wenn Du die Zwischenablage löschst, ist das gemerkt und kann beliebig oft wiederhergestellt werden!)

Wenn es eine Sache ist, die rein innerhalb der Applikation statt finden soll, dann könnte man seine eigene Zwischenablage bauen. Die wäre dann unabhängig von der Zwischenablage des Systems. Und da kannst du dann tatsächlich beliebige Funktionalitäten selbst bauen.
Also bei Ctrl-c hast Du eine Prüfung, ob etwas markiert ist (Selection) um diese dann zu kopieren in einen Speicher Deiner Wahl.
Bei Ctrl-x prüfst du, ob etwas markiert ist um das dann auszuschneiden.
Bei Ctrl.-v fügst Du es dann ein. Dabei überschreibst Du ggf. noch eine eigene Selektion

Sowas kann man durchaus bauen, wenn es explizit so verlangt wird. Aber das ist auf jeden Fall nicht das übliche, vom Anwender erwartete Verhalten! (Und das ist aus meiner Sicht mit das Wichtigste bei allen Applikationen: Es verhält sich so, wie es der Anwender erwartet! Jede Abweichung führt zwangsläufig zu Kritik/Ablehnung/Irritation.
 

gogcho

Mitglied
Danke für die ausführliche Antwort. Ich muss zugeben, dass ich mich selber geirrt hab aus irgendeinem Grund. Ihr habt vollkom recht ! Also das Thema hat sich erledigt. Vielen Dank !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin Netbeans mit JavaFX, FXML und Scenebuilder Java Basics - Anfänger-Themen 11
Juelin javaFX mit Elementen Java Basics - Anfänger-Themen 6
Juelin Netbeans und javafx Java Basics - Anfänger-Themen 6
M Wo den Ordner javafx-sdk-21.0.2 unter Linux ablegen? Java Basics - Anfänger-Themen 5
A Kapazität JavaFX TextField Java Basics - Anfänger-Themen 4
L JavaFX - grundlegende Verständnisprobleme Java Basics - Anfänger-Themen 1
S JavaFX Java Basics - Anfänger-Themen 1
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
A JavaFX Toggle_Button_Disable Java Basics - Anfänger-Themen 2
ac83 JavaFX - Kompilierungsproblem Java Basics - Anfänger-Themen 1
R Intellij javafx --> jar Java Basics - Anfänger-Themen 11
O Compiler-Fehler JavaFX fmxl LoadExeption Java Basics - Anfänger-Themen 4
M Javafx Timeline Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
A JavaFX-Filechooser Java Basics - Anfänger-Themen 5
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
A JavaFx - SceneBuilder Java Basics - Anfänger-Themen 5
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
G Javafx Eventhandler zu jedem Node Java Basics - Anfänger-Themen 1
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
T HTMLEditor JavaFX Java Basics - Anfänger-Themen 4
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
R Umsetzungsplan JavaFx App Java Basics - Anfänger-Themen 9
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
P JavaFx einrichten Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
D JAVAFX WebVIEW zu JSOUP Java Basics - Anfänger-Themen 3
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J javafx mediaplayer mit https Java Basics - Anfänger-Themen 3
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
D Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ) Java Basics - Anfänger-Themen 14
O JavaFX XML Versuch Java Basics - Anfänger-Themen 2
O JavaFX Java Basics - Anfänger-Themen 7
M JavaFX-Übung Autospiel Java Basics - Anfänger-Themen 4
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
L JavaFx ListView rechts abgeschnitten Java Basics - Anfänger-Themen 0
I Javafx Tabpane Reiter blockieren Java Basics - Anfänger-Themen 1
S JavaFX Beginneraufgabe Java Basics - Anfänger-Themen 1
W JavaFX import Fehler/Zellularautomaten Java Basics - Anfänger-Themen 1
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
CptK mit javafx button erstellen Java Basics - Anfänger-Themen 1
U Javafx Array aus Buttons Java Basics - Anfänger-Themen 2
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
M JavaFX: Problem mit der TableView Java Basics - Anfänger-Themen 0
P JavaFX ohne FXMLLoader Java Basics - Anfänger-Themen 3
K JavaFX UI controls Java Basics - Anfänger-Themen 1
B Farbverlauf erstellen ohne Javafx, AWT usw.? Java Basics - Anfänger-Themen 34
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
M Ausgabe eines Arrays auf Label (Javafx) Java Basics - Anfänger-Themen 4
K Threads Multithread in JavaFx Java Basics - Anfänger-Themen 11
R Threads in JavaFX Java Basics - Anfänger-Themen 3
N JavaFX - (Controller) - Klasse verkleinern Java Basics - Anfänger-Themen 8
U JavaFX eine Vbox Instanz pro Pane? Java Basics - Anfänger-Themen 2
Spencer Reid JavaDoc zu JavaFx hinzufügen Java Basics - Anfänger-Themen 1
V wie kann man am einfachsten für ein Element der JavaFX die Umrandung aktiwieren ? auch ohne css ? Java Basics - Anfänger-Themen 4
D OOP JavaFX objektorientiert Java Basics - Anfänger-Themen 2
V Interface ich schäme mich das zu fragen, aber ich schaff nicht ein Text zu zentrieren :( [javaFX] Java Basics - Anfänger-Themen 6
P JavaFX - Komponenten skalieren Java Basics - Anfänger-Themen 16
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
P JavaFX TextArea.setText Java Basics - Anfänger-Themen 13
F javafx.fxml.LoadException: Root hasn't been set. Java Basics - Anfänger-Themen 0
J JavaFX aus Java-Application heraus starten Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
D Javafx XYChart Variable in Schleife erzeugen? Java Basics - Anfänger-Themen 18
E JavaFX und Java auf Kommandozeile compilen Java Basics - Anfänger-Themen 2
J Webanwendung JavaFX Java Basics - Anfänger-Themen 4
Povlsen84 [javafx] Zusammenarbeit mit Tomcat Java Basics - Anfänger-Themen 4
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
Alan6 Java Editor BMI Rechner Java Basics - Anfänger-Themen 7
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
J "travelling salesman problem" mit Java Editor Java Basics - Anfänger-Themen 17
NightmareVirus Java-Editor (G. Röhner): Fehlende Dateinamen Java Basics - Anfänger-Themen 1
P Kann ich Java - Programme auch ohne Editor öffnen? Java Basics - Anfänger-Themen 70
S Fehler: Editor does not contain a main type Java Basics - Anfänger-Themen 3
G Programm wird nicht ausgeführt: Editor does not contain a main type Java Basics - Anfänger-Themen 10
N Eclipse - Editor - zugeklappte Methoden speichern Java Basics - Anfänger-Themen 3
N JDK installieren Probleme mit dem Java Editor Java Basics - Anfänger-Themen 3
L Source Code in Editor kopieren Java Basics - Anfänger-Themen 5
H Interface Problem mit Java Editor Java Basics - Anfänger-Themen 15
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
K Java-Editor: "Starten" bringt Error Java Basics - Anfänger-Themen 15
P OOP Java-Editor OOP Fehlerlösung Java Basics - Anfänger-Themen 6
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
Q Classpath mit Text Editor progammieren (Classpath) Java Basics - Anfänger-Themen 5
D Erste Schritte Problem mit dem Java-Editor Eclipse [Frage] Java Basics - Anfänger-Themen 13
H Einfacher Editor, Einfache Handelsanweisungen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben