JTable mit JTextAreas in den Zellen

dl9hda

Mitglied
Hallo, ich möchte eine Tabelle (JTable) erstellen und möchte aber in den Zellen JTextAreas haben. Gefunden habe ich dieses:
https://www.java-forum.org/thema/jtextarea-in-jtable-einbetten.31301/

Bisher habe ich einfach nur Strings gehabt. Ich habe ein
Code:
DefaultTableModel data2 = new DefaultTableModel(9, 0);
und
Code:
TableColumnModel columns2 = new DefaultTableColumnModel();

die ich unbedingt so verwenden möchte.


Bisher habe ich die Tabelle dann so erstellt.
Code:
informationTable1_0 = new JTable(data2, columns2);


Wie bekomme ich aber data2 und columns2 in die Tabelle, wenn ich

Code:
informationTable1_0 = new JTable(new JTextAreaRendererTableModel());

verwende? Ich stehe momentan echt auf dem Schlauch.



Holger
 

mihe7

Top Contributor
Du brauchst das JTextAreaRendererTableModel nicht. Interessant dürften nur die Zeilen sein:
Java:
        table.setRowHeight(0, 40);
        table.getColumnModel().getColumn(0).setCellEditor(new JTextAreaEditor());
        table.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaRenderer());
 

dl9hda

Mitglied
ich bekomme hier dann direkt eine NullPointerException im JTextAreaRenderer:

Code:
            textarea.setText(value.toString());
 

mihe7

Top Contributor
Ja, der Renderer fängt null nicht ab. Ersetz die Zeile mal durch
Java:
textarea.setText(value == null ? "" : value.toString());
 

dl9hda

Mitglied
Hallo, ich bekomme es nicht hin. Unten der Code.

Wenn ich table auskommentiere und auf dem JScrollPane darstelle, dann kann ich die Zelle editieren.

Aber bei meiner Tabelle informationTable1_0 kann ich nicht einmal in die erste Spalte klicken.


Holger



Code:
import java.awt.Component;
import java.util.EventObject;

import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.CellEditorListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;



public class TabellenTest extends JFrame
{
    private static final long serialVersionUID = 1L;
    
    public TabellenTest() 
    {
        JFrame mainWindow = new JFrame("Mein JFrame Beispiel");
        mainWindow.setLayout(null);

        
//        JTable table = new JTable(new JTextAreaRendererTableModel());
//        table.setRowHeight(0, 40);
//        table.getColumnModel().getColumn(0).setCellEditor(new JTextAreaEditor());
//        table.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaRenderer());
        
        
        
        

        DefaultTableModel data2 = new DefaultTableModel(5, 0);
        data2.addColumn("");
        data2.addColumn("");
        data2.addColumn("");
        data2.addColumn("");
        data2.addColumn("");
        
        
        TableColumnModel columns2 = new DefaultTableColumnModel();
        columns2.addColumn(new TableColumn(0));
        columns2.addColumn(new TableColumn(1));
        columns2.addColumn(new TableColumn(2));
    
        
        
        
        JTable informationTable1_0 = new JTable(data2, columns2);
        informationTable1_0.setRowHeight(0, 80);
        informationTable1_0.getColumnModel().getColumn(0).setCellEditor(new JTextAreaEditor());
        informationTable1_0.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaRenderer());
        
        
        
        
        //JScrollPane informationAusgabeScrollPane1_0 = new JScrollPane(table);
        JScrollPane informationAusgabeScrollPane1_0 = new JScrollPane(informationTable1_0);
        informationAusgabeScrollPane1_0.setBounds(0, 0, 640, 200);
        informationAusgabeScrollPane1_0.setVisible(true);
        mainWindow.add(informationAusgabeScrollPane1_0);
        
        
        mainWindow.setSize(1200, 800);
        mainWindow.setVisible(true);
        
    }

    
    public class JTextAreaRenderer implements TableCellRenderer
    {

        private JTextArea textarea = new JTextArea(5, 10);

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                int row, int column)
        {
            textarea.setText(value == null ? "" : value.toString());
            return textarea;
        }

    }




    public class JTextAreaEditor extends AbstractCellEditor implements TableCellEditor
    {
        private static final long serialVersionUID = 1L;
        private JTextArea textarea = new JTextArea(5, 10);

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
        {
            textarea.setText(value.toString());
            return textarea;
        }

        public Object getCellEditorValue()
        {
            return textarea.getText();
        }

        public void addCellEditorListener(CellEditorListener arg0) {
            // TODO Auto-generated method stub
            
        }

        public void cancelCellEditing() {
            // TODO Auto-generated method stub
            
        }

        public boolean isCellEditable(EventObject arg0) {
            // TODO Auto-generated method stub
            return true; //<--- geändert von false
        }

        public void removeCellEditorListener(CellEditorListener arg0) {
            // TODO Auto-generated method stub
            
        }

        public boolean shouldSelectCell(EventObject arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        public boolean stopCellEditing() {
            // TODO Auto-generated method stub
            return false;
        }

    }




    public class JTextAreaRendererTableModel extends AbstractTableModel
    {
        private static final long serialVersionUID = 1L;
        private String value = "";

        public int getRowCount()
        {
            return 1;
        }

        public void setValueAt(Object aValue, int rowIndex, int columnIndex)
        {
            value = aValue.toString();
        }

        public int getColumnCount()
        {
            return 1;
        }

        public Object getValueAt(int rowIndex, int columnIndex)
        {
            return value;
        }
        
        public Class<?> getColumnClass(int columnIndex)
        {
            return String.class;
        }

        public boolean isCellEditable(int rowIndex, int columnIndex)
        {
            return true;
        }
    }
    
    
    
    
    
    
    public static void main(String[] args) 
    {
        new TabellenTest();
    }
}
 

mihe7

Top Contributor
Ist gleiches Problem wie beim Renderer: null wird nicht abgefangen.

Hier:
Java:
import java.awt.Component;
import java.util.EventObject;

import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.CellEditorListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;



public class TabellenTest extends JFrame
{
    private static final long serialVersionUID = 1L;
    
    public TabellenTest() 
    {

        DefaultTableModel data2 = new DefaultTableModel(5, 0);
        data2.addColumn("");
        data2.addColumn("");
        data2.addColumn("");
        data2.addColumn("");
        data2.addColumn("");
        
        
        TableColumnModel columns2 = new DefaultTableColumnModel();
        columns2.addColumn(new TableColumn(0));
        columns2.addColumn(new TableColumn(1));
        columns2.addColumn(new TableColumn(2));
    
        JTable informationTable1_0 = new JTable(data2, columns2);
        informationTable1_0.setRowHeight(0, 80);
        informationTable1_0.getColumnModel().getColumn(0).setCellEditor(new JTextAreaEditor());
        informationTable1_0.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaRenderer());
        
        JScrollPane informationAusgabeScrollPane1_0 = new JScrollPane(informationTable1_0);

        JFrame mainWindow = new JFrame("Mein JFrame Beispiel");
        mainWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        mainWindow.add(informationAusgabeScrollPane1_0);
        mainWindow.pack();
        mainWindow.setVisible(true);
        
    }

    
    public class JTextAreaRenderer implements TableCellRenderer
    {

        private JTextArea textarea = new JTextArea(5, 10);

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                int row, int column)
        {
            textarea.setText(value == null ? "" : value.toString());
            return textarea;
        }

    }




    public class JTextAreaEditor extends AbstractCellEditor implements TableCellEditor
    {
        private static final long serialVersionUID = 1L;
        private JTextArea textarea = new JTextArea(5, 10);

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
        {
            textarea.setText(value == null ? "" : value.toString());
            return textarea;
        }

        public Object getCellEditorValue()
        {
            return textarea.getText();
        }

        public void addCellEditorListener(CellEditorListener arg0) {
            // TODO Auto-generated method stub
            
        }

        public void cancelCellEditing() {
            // TODO Auto-generated method stub
            
        }

        public boolean isCellEditable(EventObject arg0) {
            // TODO Auto-generated method stub
            return true; //<--- geändert von false
        }

        public void removeCellEditorListener(CellEditorListener arg0) {
            // TODO Auto-generated method stub
            
        }

        public boolean shouldSelectCell(EventObject arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        public boolean stopCellEditing() {
            // TODO Auto-generated method stub
            return false;
        }

    }

    public static void main(String[] args) 
    {
        new TabellenTest();
    }
}
 

dl9hda

Mitglied
Puuuh, ok und vielen Dank. Da keine Fehlermeldung kam.


Nun habe ich aber noch eine abschließende Frage: Ist es möglich die erste Reihe einer Tabelle herauszunehmen? Da ich schon einen Header habe, würde ich gerne in der ersten Zeile der Tabelle fixe Werte setzen.




Gruß
Holger
 
Zuletzt bearbeitet:

dl9hda

Mitglied
Ich habe jetzt noch ein wirkliches Problem ;) :

Wenn ich jetzt in eine Zelle etwas reinschreibe, wie komme ich dann in eine andere Zelle? Wenn ich nun in eine ander Zelle klicke, dann passiert nichts.
 

mihe7

Top Contributor
Ja, die Implementierung ist schlecht.

Hier mal etwas besser:

Java:
import java.awt.Component;
import java.awt.Color;
import java.util.EventObject;

import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.CellEditorListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;



public class TabellenTest extends JFrame
{
    private static final long serialVersionUID = 1L;
    
    public TabellenTest() {
        DefaultTableModel data2 = new DefaultTableModel(5, 0);
        data2.addColumn("A");
        data2.addColumn("B");
        data2.addColumn("C");
        data2.addColumn("D");
        data2.addColumn("E");
           
        JTable informationTable1_0 = new JTable(data2);
        informationTable1_0.setRowHeight(0, 80);
        informationTable1_0.getColumnModel().getColumn(0).setCellEditor(new JTextAreaEditor());
        informationTable1_0.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaRenderer());
        
        JScrollPane informationAusgabeScrollPane1_0 = new JScrollPane(informationTable1_0);

        JFrame mainWindow = new JFrame("Mein JFrame Beispiel");
        mainWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        mainWindow.add(informationAusgabeScrollPane1_0);
        mainWindow.pack();
        mainWindow.setVisible(true);
    }

    
    public class JTextAreaRenderer implements TableCellRenderer {

        private JTextArea textarea = new JTextArea(5, 10);

        public Component getTableCellRendererComponent(JTable table, Object value, 
                boolean isSelected, boolean hasFocus, int row, int column) {
            textarea.setText(value == null ? "" : value.toString());
            Color background = isSelected ? table.getSelectionBackground() 
                                          : table.getBackground();
            textarea.setBackground(background);
            return textarea;
        }
    }

    public class JTextAreaEditor extends AbstractCellEditor 
            implements TableCellEditor {
        private static final long serialVersionUID = 1L;
        private JTextArea textarea = new JTextArea(5, 10);

        public Component getTableCellEditorComponent(JTable table, Object value,
                boolean isSelected, int row, int column) {
            textarea.setText(value == null ? "" : value.toString());
            return textarea;
        }

        public Object getCellEditorValue() {
            return textarea.getText();
        }
    }

    public static void main(String[] args) {
        new TabellenTest();
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
X Swing JTable zeigt nichts Allgemeine Java-Themen 4
G jTable aktualisieren?! Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
V JTable Externe Lib Allgemeine Java-Themen 2
F JTable Pfeiltasten-Verhalten Allgemeine Java-Themen 1
T jTable Gestaffelte Überschriften Allgemeine Java-Themen 22
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
A JTable Bilder Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
A JTable - CellRange auslesen Allgemeine Java-Themen 2
A jTable Renderer Allgemeine Java-Themen 5
N JTable filtern Allgemeine Java-Themen 3
hdi JTable#print & Druckgröße Allgemeine Java-Themen 6
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
G JTable: ListSelectionListener removen Allgemeine Java-Themen 8
M JTable + ArrayList Allgemeine Java-Themen 3
G Aktualisierung einer JTable erfolgt nicht zuverlässig Allgemeine Java-Themen 14
E Hintergrund einer JTable änden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
Iron Monkey Inhalt von JTable in die Textdatei mit StringWidth schreiben Allgemeine Java-Themen 3
P jTable getSelectedRow? Allgemeine Java-Themen 2
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
X xml aus Zip in JTable Allgemeine Java-Themen 2
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
H JTable per iText in PDF: Größenanpassung möglich? Allgemeine Java-Themen 2
F XML zu JTable mit JDOM Allgemeine Java-Themen 2
E JTable wird nicht angezeigt Allgemeine Java-Themen 11
Screen ImageIcon in Cell der JTable Allgemeine Java-Themen 2
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
A Swing JTable Polymorphismus Allgemeine Java-Themen 2
trash super + JTable Allgemeine Java-Themen 7
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
L JTABLE setvalueat methode! Allgemeine Java-Themen 16
C Swing Daten zwischen JTable teilen Allgemeine Java-Themen 6
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
B JTable nach Icon sortieren Allgemeine Java-Themen 6
N Exception beim auslesen einer JTable Allgemeine Java-Themen 5
M jdesktop binding: jTable update nach Änderung... Allgemeine Java-Themen 3
D JTable mit GROUP BY Allgemeine Java-Themen 23
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
X JTable mit Checkboxen -> Setzen (true/false) der Checkboxen per Mouseklick... Allgemeine Java-Themen 3
P JTable drucken Allgemeine Java-Themen 8
A JTable Feldwerte in JTextFelder mit blättern Allgemeine Java-Themen 5
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
M jTable Allgemeine Java-Themen 19
D jTable und TableModel Allgemeine Java-Themen 2
B Exception bei leerem JTable verhindern Allgemeine Java-Themen 10
A Observable BeansBinding an einer JTable bzw. JXTable Allgemeine Java-Themen 3
P Textfile -> Array -> JTable Allgemeine Java-Themen 9
S JTable Aktuelisieren ber Wie ? Allgemeine Java-Themen 4
MQue JComboBox in JTable Allgemeine Java-Themen 4
J Ergebnismenge eines SQL-Queries in JTable anzeigen Allgemeine Java-Themen 3
MQue JTable alles rechts Allgemeine Java-Themen 8
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
R JTable und Cell Renderer Allgemeine Java-Themen 3
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
J keylistener auf jtable Allgemeine Java-Themen 19
C JTable, Abstand zwischen Zellen Allgemeine Java-Themen 2
G Eindeutiges Identifizieren einer JTable/Component z.laufzeit Allgemeine Java-Themen 2
D JTable -> ArrayIndexOutOfBoundsException bei Mausklick Allgemeine Java-Themen 2
S JTable editieren + in JTextField schreiben Allgemeine Java-Themen 7
G Daten in / für JTable beim Scrollen nachladen? Allgemeine Java-Themen 5
M JTable verändert Position auf meinem JPanel Allgemeine Java-Themen 3
P JTable Allgemeine Java-Themen 2
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
P JTable setDataVector Allgemeine Java-Themen 2
D Scrollbalken in meiner JTable auf einmal weg. Allgemeine Java-Themen 2
P JTable Allgemeine Java-Themen 8
P JButtons mit JTable verknüpfen Allgemeine Java-Themen 16
G fehler bei JTable mit JDK1.6 Allgemeine Java-Themen 4
M CheckBox in JTable - ich verzweifle gleich Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
P JTable Allgemeine Java-Themen 4
E JButton bleibt in der JTable Allgemeine Java-Themen 2
E JButton in einer Zelle von JTable Allgemeine Java-Themen 16
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
P JTable suchen in einer Spalte Allgemeine Java-Themen 24
G JTable wird nicht richtig aufgebaut Allgemeine Java-Themen 9
C Ausdrucken einer JTable in eine Datei mit Erhalt des Formats Allgemeine Java-Themen 3
W Columns austauschen/verschieben von jtable Allgemeine Java-Themen 3
P 3rd party JTable libraries (freeware/opensource) Allgemeine Java-Themen 19
D JTable aus Eclipse Ok, kompeliert aber nicht Allgemeine Java-Themen 6
G mySQL und JTable Allgemeine Java-Themen 7
D JTable und Buttons Allgemeine Java-Themen 16
B JScrollPane in einer JTable aktualisieren? Allgemeine Java-Themen 9
G CheckBox in JTable Allgemeine Java-Themen 3
S JTable erzeugen und updaten Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben