JTextArea in JTable

Status
Nicht offen für weitere Antworten.

NaBazTag

Mitglied
Hallo,

ich hoffe ihr könnt mir bei meinem Problem helfen.
Also ich habe eine MultiLine Table, die ich über eine JTextArea in den Zellen gelöst habe:

Code:
public class MultiLine_JTable extends DefaultCellEditor {
	
	  public MultiLine_JTable() {
	    super(new JTextField());
	    final JTextArea textArea = new JTextArea();
	    textArea.setWrapStyleWord(true);
	    textArea.setLineWrap(true);
	    JScrollPane scrollPane = new JScrollPane(textArea);
	    scrollPane.setBorder(null);
	    editorComponent = scrollPane;

	    delegate = new DefaultCellEditor.EditorDelegate() {
	      public void setValue(Object value) {
	        textArea.setText((value != null) ? value.toString() : "");
	      }
	      public Object getCellEditorValue() {
	        return textArea.getText();
	      }
	    };
	  }
}

Für die Spalten benutze ich einfach .setCellEditor(new MultiLine_JTable()), um die TextArea zu implementieren.

Mein Model für meine Table sieht wie folgt aus:

Code:
public class DienstPlan_TableModel extends AbstractTableModel{
	
        private String[] columnNames = {"Montag",
                                        "Dienstag",
                                        "Mittwoch",
                                        "Donnerstag",
                                        "Freitag"};
        public Object[][] data = {
            {null, null, null, null, null}
        };

        public final Object[] oEintragArr = {null, null,null, null, null};

        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

       public boolean isCellEditable(int row, int col) {
            if (col < 0) {
                return false;
            } else {
                return true;
            }
        }

}


Das funktioniert auch soweit, allerdings wird die TextArea nur angezeigt, wenn die Zelle auch selektiert, also doubleclicked wurde. Ansonsten wird nur die normale TableCell angezeigt, ohne Formatierung.
Kann ich irgendwie erreichen, dass die TextArea immer im Vordergrund bleibt?

Die TextArea befülle ich per DnD, aber solange sie nicht im "Vordergrund" bleiben, muss ich auch hier immer erst selektieren, um etwas in die TextArea zu ziehen. ;/

Bin für jede Hilfe dankbar.

Gruß

NaBazTag
 
Um den Text immer als JTextArea sehen zu können benötigen wir einen entsprechenden Renderer.
Um einen Text mit der Maus in eine Zelle zu ziehen, müssen wir die Zelle bei dragOver editieren. Etwa so:
Code:
table.setDropTarget(new DropTarget() {
    public synchronized void dragOver(DropTargetDragEvent evt) {
        Point p = evt.getLocation();
        table.editCellAt(table.rowAtPoint(p), table.columnAtPoint(p));
        table.getEditorComponent().requestFocusInWindow();
    }
});
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben