KeyListener-Algorithmus für JTextArea

Status
Nicht offen für weitere Antworten.

Romsl

Mitglied
Dieser funktioniert nur wenn ich einen actionBuffer anlege bei dem ich für jedes eingegebene Zeichen einen Asterisk und für Enter, Backspace und Delete ein '|'.
Das ganze alles, um die Zeilen nicht neu zu setzen wenn noch Zeichen in der Zeile in der gelöscht wird stehen.

1. Problem: ist dann wenn ich nicht am Ende des Textes der TextArea beginne funktioniert das ganze nicht.
2. Problem: ich muss den actionBuffer mit in der Datenbank speichern.
3. Problem: wenn ich einen Teil des Textes markiere und lösche wird nicht der vorgesehene Teil im actionBuffer nicht gelöscht.
4. Problem: gibt es bestimmt, ist mir aber noch nicht bekannt

Ich habs mit der CaretPosition scho versucht. Diese gibt mir aber immer nur die Position aus an der der Cursor zuvor stand.

Gibt es einen Source Code der auf alle möglichen Eingaben des Benutzers reagiert.

D.h. z.B. neu setzen der Zeilenhöhe wenn kein Text mehr in der zu löschenden Zeile steht, oder nicht neu setzen wenn noch Text drin steht, bei Enter und line wrap neu setzen der Zeilenhöhe,...

Code:
import javax.swing.event.*;
import java.util.EventObject;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import daps_gui.*;
import java.sql.*;
import java.awt.event.*;

/**
 * 

Headline: </p>
 * 

Description: </p>
 * @version 1.0
 */

public class MultiCellEditor extends AbstractCellEditor implements TableCellEditor {

  protected EventListenerList listenerList = new EventListenerList();
  transient protected ChangeEvent changeEvent = null;

  protected int lineCount = 0;
  protected StringBuffer actionBuffer = new StringBuffer();

  protected KeyListener keyListener = new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
      try {
        if (e.getKeyCode() == e.VK_BACK_SPACE || e.getKeyCode() == e.VK_DELETE) {
          if (actionBuffer.charAt(actionBuffer.length() - 1) == '|') {
            table.setRowHeight(tableRow - 1, (table.getFont().getSize() + 4) * (textArea.getLineCount() - 1));
            lineCount = textArea.getLineCount();
            actionBuffer.deleteCharAt(actionBuffer.length() - 1);
            System.out.println(actionBuffer);
          }
          else {
            table.setRowHeight(tableRow - 1, (table.getFont().getSize() + 4) * (textArea.getLineCount()));
            lineCount = textArea.getLineCount();
            actionBuffer.deleteCharAt(actionBuffer.length() - 1);
            System.out.println(actionBuffer);
          }
        }
        else if (e.getKeyCode() == e.VK_ENTER && !e.isControlDown()) {
          table.setRowHeight(tableRow - 1, (table.getFont().getSize() + 4) * (textArea.getLineCount() + 1));
          lineCount = textArea.getLineCount();
          actionBuffer.append('|');
        }
        else if (e.getKeyCode() == e.VK_ENTER && e.isControlDown()) {
          lineCount = textArea.getLineCount();
          stopCellEditing();
        }
        else if (!e.isActionKey()) {
          table.setRowHeight(tableRow - 1, (table.getFont().getSize() + 4) * (textArea.getLineCount()));
          lineCount = textArea.getLineCount();
          actionBuffer.append('*');
        }
      }
      catch (IndexOutOfBoundsException ioofe) {
        //do nothing
      }
    }
  };

  protected JTextArea textArea = new JTextArea();
  protected Font font = new Font("SansSerif", Font.PLAIN, 10);
  protected DAPS daps = null;
  protected ReservationGUI reservationGUI = null;
  protected ResultSet data = null;
  protected int reid = 0;
  protected int zid = 0;

  protected JTable table = null;
  protected int tableRow = 0;

  public MultiCellEditor(DAPS daps, ReservationGUI reservationGUI, int reid) {
    this.daps = daps;
    this.reservationGUI = reservationGUI;
    this.reid = reid;
  }

  /**
   * Returns true.
   * @param e  an event object
   * @return true
   */
  public boolean isCellEditable(EventObject e) {
    return true;
  }

  /**
   * Returns true.
   * @param anEvent  an event object
   * @return true
   */
  public boolean shouldSelectCell(EventObject anEvent) {
    return true;
  }

  /**
   * Calls <code>fireEditingStopped</code> and returns true.
   * @return true
   */
  public boolean stopCellEditing() {
    this.daps.reservation.changeDescription(reid, zid, this.textArea.getText(), this.actionBuffer.toString());
    try {
      this.actionBuffer.delete(0, actionBuffer.length() - 1);
    }
    catch (StringIndexOutOfBoundsException sioobe) {
      //do nothing
    }
    fireEditingStopped();
    return true;
  }

  /**
   * Calls <code>fireEditingCanceled</code>.
   */
  public void cancelCellEditing() {
    fireEditingCanceled();
  }

  /**
   * Adds a <code>CellEditorListener</code> to the listener list.
   * @param l  the new listener to be added
   */
  public void addCellEditorListener(CellEditorListener l) {
    listenerList.add(CellEditorListener.class, l);
  }

  /**
   * Removes a <code>CellEditorListener</code> from the listener list.
   * @param l  the listener to be removed
   */
  public void removeCellEditorListener(CellEditorListener l) {
    listenerList.remove(CellEditorListener.class, l);
  }

  /**
   * Notifies all listeners that have registered interest for
   * notification on this event type.  The event instance
   * is created lazily.
   *
   * @see EventListenerList
   */
  protected void fireEditingStopped() {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length - 2; i >= 0; i -= 2) {
      if (listeners[i] == CellEditorListener.class) {
        // Lazily create the event:
        if (changeEvent == null) {
          changeEvent = new ChangeEvent(this);
        }
        ((CellEditorListener) listeners[i + 1]).editingStopped(changeEvent);
      }
    }
  }

  /**
   * Notifies all listeners that have registered interest for
   * notification on this event type.  The event instance
   * is created lazily.
   *
   * @see EventListenerList
   */
  protected void fireEditingCanceled() {
    // Guaranteed to return a non-null array
    Object[] listeners = listenerList.getListenerList();
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length - 2; i >= 0; i -= 2) {
      if (listeners[i] == CellEditorListener.class) {
        // Lazily create the event:
        if (changeEvent == null) {
          changeEvent = new ChangeEvent(this);
        }
        ((CellEditorListener) listeners[i + 1]).editingCanceled(changeEvent);
      }
    }
  }

  public Object getCellEditorValue() {
    return this.textArea.getText();
  }

  public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row,
                                               int column) {

    this.tableRow = row + 1;
    this.table = table;
    this.lineCount = this.textArea.getLineCount();

    data = this.daps.reservation.getRoomsOfReservation(reid);
    try {
      data.absolute(tableRow);
      this.zid = data.getInt(2);
      actionBuffer.append(data.getString(8));
    }
    catch (SQLException sqle) {
      sqle.printStackTrace();
    }

    actionBuffer.deleteCharAt(actionBuffer.length() - 1);

    if (this.textArea.getKeyListeners().length < 1) {
      this.textArea.addKeyListener(keyListener);
    }

    this.textArea.setText(String.valueOf(value));
    this.textArea.setFont(font);
    this.textArea.setWrapStyleWord(true);
    this.textArea.setLineWrap(true);

    return this.textArea;
  }
}

Bin schon eine ganze Weile an diesem Problem und komm nur sehr spärlich weiter. Bin daher dankbar über jede Hilfe.

Vielen Dank schonmal im voraus

Romsl
 

meez

Top Contributor
Es wäre durchaus angebracht, mal zu schreiben, was du eigentlich machen willst...
Wir können nicht hellsehen...
 

Romsl

Mitglied
Steht doch dran?!?

Gibt es einen Source Code der auf alle möglichen Eingaben des Benutzers reagiert.

D.h. z.B. neu setzen der Zeilenhöhe wenn kein Text mehr in der zu löschenden Zeile steht, oder nicht neu setzen wenn noch Text drin steht, bei Enter und line wrap neu setzen der Zeilenhöhe,...
 
R

Roar

Gast
ohne irgendwas von deinem soruce gelesen zu haben: überschreib die methoden processXXXEvent deiner kopmonente
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
H KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
T Event Handling KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
C Keylistener funktioniert nicht AWT, Swing, JavaFX & SWT 1
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
A Event Handling Muss ich 'KeyListener' tasuend mal zufügen? AWT, Swing, JavaFX & SWT 7
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
S Keylistener reagiert bei Buttons nicht. AWT, Swing, JavaFX & SWT 8
S KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 2
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
V Tastatur KeyListener für mehrere Buttons AWT, Swing, JavaFX & SWT 1
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
X KeyListener AWT, Swing, JavaFX & SWT 0
L KeyListener für JDialog AWT, Swing, JavaFX & SWT 7
N KeyListener funktioniert nicht richitg AWT, Swing, JavaFX & SWT 4
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
T KeyListener AWT, Swing, JavaFX & SWT 2
GianaSisters JFrame mit JInternalFrames, Keylistener-Problem AWT, Swing, JavaFX & SWT 9
7 KeyListener tastatur temporär blockieren AWT, Swing, JavaFX & SWT 7
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
B SWT Problem: Wie kann man für jede TableColumn einen eigenen KeyListener registrieren. AWT, Swing, JavaFX & SWT 1
U Mouse + Keylistener AWT, Swing, JavaFX & SWT 12
K ActionListener mit KeyListener AWT, Swing, JavaFX & SWT 7
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
A Swing KeyEvent mit KeyListener und KeyAdapter kürzer schreiben AWT, Swing, JavaFX & SWT 7
D JTextArea auf KeyListener Command AWT, Swing, JavaFX & SWT 6
C KeyListener AWT, Swing, JavaFX & SWT 5
Doopy Event Handling KeyListener funktioniert nach Restart nicht mehr AWT, Swing, JavaFX & SWT 7
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
C Swing KeyListener in JPanel AWT, Swing, JavaFX & SWT 2
A KeyListener Button wechseln & Programm beenden AWT, Swing, JavaFX & SWT 4
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
H Bild mit KeyListener verschieben AWT, Swing, JavaFX & SWT 2
C JTextField KeyListener AWT, Swing, JavaFX & SWT 6
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
P KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 11
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
T KeyListener AWT, Swing, JavaFX & SWT 4
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
T BlueJ KeyListener AWT, Swing, JavaFX & SWT 7
Z KeyListener AWT, Swing, JavaFX & SWT 2
M Swing KeyListener in JTextfield AWT, Swing, JavaFX & SWT 4
C Swing KeyListener für JPanel funktioniert nicht AWT, Swing, JavaFX & SWT 8
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
A Keylistener reagiert nicht AWT, Swing, JavaFX & SWT 10
D Problem mit KeyListener AWT, Swing, JavaFX & SWT 2
J KeyListener um auf CTRL-Enter zu reagieren AWT, Swing, JavaFX & SWT 2
L Snake in Java KeyListener Problem AWT, Swing, JavaFX & SWT 30
B "globaler" KeyListener? AWT, Swing, JavaFX & SWT 3
B JTable TableHeader KeyListener AWT, Swing, JavaFX & SWT 4
S Swing KeyListener und JList AWT, Swing, JavaFX & SWT 2
R KeyListener funzt nicht AWT, Swing, JavaFX & SWT 2
X KeyListener AWT, Swing, JavaFX & SWT 4
P KeyListener + Animation AWT, Swing, JavaFX & SWT 2
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
V Problem mit KeyListener im Fullscreen-Modus AWT, Swing, JavaFX & SWT 2
M AWT KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 10
C Swing KeyListener reagiert nicht AWT, Swing, JavaFX & SWT 7
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
F Tastenabfrage (KeyListener) AWT, Swing, JavaFX & SWT 2
D KeyListener Problem bei JPanel wechsel AWT, Swing, JavaFX & SWT 2
S Swing JTree mit KeyListener AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, requestFocus und KeyBindings AWT, Swing, JavaFX & SWT 8
E JFrame akzeptiert den KeyListener nicht AWT, Swing, JavaFX & SWT 3
F Swing Problem mit KeyListener||paintComponent() in JFrame AWT, Swing, JavaFX & SWT 12
P Swing KeyListener hört nur manchmal zu AWT, Swing, JavaFX & SWT 2
Screen Focus Problem , KeyListener, TextField , Key AWT, Swing, JavaFX & SWT 4
earlgrey_tea AWT KeyListener bekommt keine Signale AWT, Swing, JavaFX & SWT 3
L Problem mit KeyListener AWT, Swing, JavaFX & SWT 3
A KeyListener funktioniert nicht AWT, Swing, JavaFX & SWT 4
D KeyListener-Problem nach dem "Gedrückthalten" einer Taste AWT, Swing, JavaFX & SWT 10
B Swing Keylistener fuer Dialog-Buttons AWT, Swing, JavaFX & SWT 2
B KeyListener Strg+s AWT, Swing, JavaFX & SWT 5
D Globaler Keylistener AWT, Swing, JavaFX & SWT 4
M problem mit keylistener/textarea AWT, Swing, JavaFX & SWT 6
M KeyListener Problem unter Firefox AWT, Swing, JavaFX & SWT 2
L AWT KeyListener, Taste gedrückt halten AWT, Swing, JavaFX & SWT 12
M Komisches Verhalten: JCombobox mit KeyListener AWT, Swing, JavaFX & SWT 13
capgeti SWT KeyListener 2 Tasten Problem AWT, Swing, JavaFX & SWT 3
R KeyListener - welcher Komponente hinzufügen AWT, Swing, JavaFX & SWT 5
Developer_X AWT KeyListener wird nicht ausgeführt! AWT, Swing, JavaFX & SWT 3
N JFrame und KeyListener AWT, Swing, JavaFX & SWT 6
M KeyListener reagiert nach Buttondruck nicht mehr AWT, Swing, JavaFX & SWT 4
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R KeyListener hinzufügen AWT, Swing, JavaFX & SWT 7
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G KeyListener AWT, Swing, JavaFX & SWT 3
E KeyListener AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben