Hallo,
In einem JDialog habe ich eine JTextArea (inkl. JScrollPane) und zwei JButtons (inkl. JPanel) untergebracht. Die textArea wird bereits im Konstruktor mit dem Inhalt einer .txt Datei gefüllt. Ein JButton soll nach dem Laden dazu dienen, die Änderungen am Text zurück in die .txt Datei zu schreiben (save), der andere soll das Fenster schließen (cancel).
Mittels enabled property wollte ich nun erreichen, dass der save-Button nur dann aktiv ist, wenn es auch tatsächlich Änderungen im Text gegeben hat. Sprich:
1. Nach dem Start ist der save-Button grau
2. Ändert der Benutzer den Text (caretUpdateEvent), soll der save-Button aktiv werden.
3. Sobald die Änderungen gespeichert sind, soll der save-Button wieder grau werden.
Das Problem: Der save-Button reagiert nicht auf Änderungen der entsprechenden enabled property!
Hier der relevante Code:
Was mache ich falsch?
Für Hilfe außerordentlich dankbar,
blaxx
P.S.
Der Teil, der den Text schließlich zurück in die Datei schreibt, fehlt noch
In einem JDialog habe ich eine JTextArea (inkl. JScrollPane) und zwei JButtons (inkl. JPanel) untergebracht. Die textArea wird bereits im Konstruktor mit dem Inhalt einer .txt Datei gefüllt. Ein JButton soll nach dem Laden dazu dienen, die Änderungen am Text zurück in die .txt Datei zu schreiben (save), der andere soll das Fenster schließen (cancel).
Mittels enabled property wollte ich nun erreichen, dass der save-Button nur dann aktiv ist, wenn es auch tatsächlich Änderungen im Text gegeben hat. Sprich:
1. Nach dem Start ist der save-Button grau
2. Ändert der Benutzer den Text (caretUpdateEvent), soll der save-Button aktiv werden.
3. Sobald die Änderungen gespeichert sind, soll der save-Button wieder grau werden.
Das Problem: Der save-Button reagiert nicht auf Änderungen der entsprechenden enabled property!
Hier der relevante Code:
Java:
public class textViewPanel extends javax.swing.JDialog {
// VARS
private boolean textSaveNeeded = false;
private String currentText = "";
private String source = "";
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
// CONSTRUCTOR
public textViewPanel(JFrame parent, boolean modal, String source) {
super(parent, modal);
this.source = source;
initComponents();
initContent();
// tracking changes to save
textArea.addCaretListener (new CaretListener() {
@Override
public void caretUpdate (CaretEvent e) {
setTextSaveNeeded(true);
}
});
}
// METHODS
private void initContent(){
readText().run();
}
private Task readText(){
return new ReadTask(main.getApplication());
}
public String getCurrentText() {
return currentText;
}
private void setCurrentText() {
this.currentText = textArea.getText();
}
private boolean isTextSaveNeeded() {
return textSaveNeeded;
}
private void setTextSaveNeeded(boolean textSaveNeeded) {
boolean oldNeeded = this.textSaveNeeded;
this.textSaveNeeded = textSaveNeeded;
firePropertyChange("textSaveNeeded", oldNeeded, textSaveNeeded);
System.err.println(this.textSaveNeeded);
}
// ACTIONS
@Action (enabledProperty = "textSaveNeeded")
private void saveText(){
setCurrentText();
setTextSaveNeeded(false);
}
// TASKS
private class ReadTask extends Task {
ReadTask(Application app) {
super(app);
}
@Override
protected Void doInBackground() {
try {
FileInputStream inputStream = new FileInputStream( source );
Scanner s = new Scanner(new BufferedReader(new InputStreamReader(inputStream, "UTF-8")));
while(s.hasNext()){
textArea.append("\n" + s.nextLine());
}
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
return null;
}
@Override
protected void finished() {
textArea.setCaretPosition(0);
}
}
private void initComponents() { [...] }
// Variables declaration - do not modify
[...]
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
}
Was mache ich falsch?
Für Hilfe außerordentlich dankbar,
blaxx
P.S.
Der Teil, der den Text schließlich zurück in die Datei schreibt, fehlt noch
Zuletzt bearbeitet: