JTable: Anzahl Zeichen bei Eingabe

Status
Nicht offen für weitere Antworten.

MScalli

Bekanntes Mitglied
Hi Leutz.
Mal ne Frage. Wie bekomm ich es hin das ich bei ner Zelle in einer Tabelle nur eine bestimmte Anzahl von Zeichen zulasse.

d.h. der User darf nur eine bestimmte Anzahl von Zeichen eintragen.
bei 3 Zeichen könnte er also nur "abc" eintippen.

gruss
MScalli
 

Niki

Top Contributor
Du kannst beim TableCellEditor beim TextFeld ein Document setzen. Es könnte z.B. so aussehen:
Code:
JTextField tf = new JTextField();
tf.setDocument(new PlainDocument(){
  public void insertString(int offs, String str, AttributeSet a){
    int length = getLength() + str.length();
    if(length > 3)
      return;
    super.insertString(offs, str, a);
  }
});
DefaultCellEditor editor = new DefaultCellEditor(tf);

Ich weiß nicht ob es so funktioniert, da ich es nicht ausprobiert habe.
 

MScalli

Bekanntes Mitglied
Nicht ganz..
aber einen Ansatz hab ich ja jetzt schon. ;)

Es gibt nur noch ein Problem bei rein klicken.

also es können wirklich nur noch soviel Zeichen eingegeben werden wie vorgesehen.
leider wenn der Einzufügende String etwas kürzer ist und das TextFeld bisschen länger,
einfach der String noch paar mal eingefügt!!
wenn die Zelle mit "Spalte 2" gefüllt ist un ich rein klicke wird daraus..
"Spalte 2Spalte 2Spalte 2Spalte 2Spalte 2Spalte 2Spalte 2"

hier die Klasse CharDocument(müsste passen.. verwende ich oft bei JTextFields)

Code:
import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;

/**
 * Diese Klasse ist ein Dokument für Textfelder, welches...
 * 
 * 1. Eingabe auf x Zeichen begrenzt.
 *
 * Die Zuweisung geschieht über
 * JTextfield.setDocumenT(new CharDocument(int anzahl));
 */
public class CharDocument extends PlainDocument{

	private static final long serialVersionUID = 5032290234368360350L;
	
	private int limit;

    /**
     * Konstruktor
     * @param int limit: maximale Anzahl der einzugebenen Zeichen
     */
    public CharDocument(int newLimit){
        super();
        if (limit < 0){
            limit = 0;
        } else {
            limit = newLimit;
        }
    }

    /**
     * Funktion überschreibt die Methode insertString von PlaintDocument
     * @param int offset: Position
     * @param String str: der String
     * @param AttributeSet attr: Attributset
     */
    public void insertString (int offset, String str, AttributeSet attr) throws BadLocationException {
    	
        if (str == null) return;
        
        for (int i=0; i<str.length();i++) {
        	//System.out.println(str);

            if ((getLength() + str.length()) > limit){
            	// wenn man hier rein kommt ist das übergebene limit erreicht
            	return;
            }
        //Wichtig Aufruf der übergeordneten Methode
        super.insertString(offset, str, attr);
    	}
    }
}

und hier die Klasse die das JTable erzeugt

Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
import javax.swing.text.PlainDocument;

public class CreateTableWithColumn extends JPanel implements ActionListener{

	private static final long serialVersionUID = -2306289506379055756L;
	
	String[] column_names;
	Object[][] data;
	

    public CreateTableWithColumn(int width, int height, String[] _column_names, Object[][] _data, int[] _width_array, int[] _char_length) {
        super(new BorderLayout());

        column_names = _column_names;
        data = _data;

        JTable table = new JTable(new MyTableModel());
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

        // Panel erzeugen auf dem alles liegen soll
        JPanel panel = new JPanel();
        
        //ScrollPane erzeugen und JTable adden
        JScrollPane scrollPane = new JScrollPane(table);
        scrollPane.setPreferredSize(new Dimension(width,height));

        //grösse der Zellen setzten
        initColumnSizesWithCharLength(table, _width_array, _char_length);

        //JPanel und JScrollPane hinzufügen.
        add(panel);
        panel.add(scrollPane);
        
        JButton btn_add_line = new JButton(MyParam.getPicClose());
        btn_add_line.setBounds(this.getWidth()-30,5,22,22);
        btn_add_line.setBorderPainted(false);
    	btn_add_line.setToolTipText("Satz hinzufügen");
    	btn_add_line.setActionCommand("add_line");
    	btn_add_line.setOpaque(false);
        btn_add_line.addActionListener(this);
        add(btn_add_line, BorderLayout.SOUTH);
        
    }
    private void initColumnSizesWithCharLength(JTable table, int[] _width_array, int[] _char_length) {
        TableColumn column = null;

        for (int i = 0; i < _width_array.length; i++) {
            JTextField tf = new JTextField();
            tf.setDocument(new CharDocument(_char_length[i]));
            
            column = table.getColumnModel().getColumn(i);
            column.setCellEditor(new DefaultCellEditor(tf));
            column.setPreferredWidth(_width_array[i]);
        }
		
	}


    class MyTableModel extends AbstractTableModel {

		private static final long serialVersionUID = -2764611210789334359L;

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

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

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

        public Object getValueAt(int row, int col) {
        	System.out.println(data[row][col]);
            return data[row][col];
        }
 
        public void setValueAt(Object val, int row, int col) {
        	System.out.println("value = " + val);
            data[row][col] = val;
            fireTableCellUpdated(row, col);
        }

        /*
         * JTable benutzt diese Methode um den Default Renderer zu beenden
         * sonst würde z.B. ststt CheckBoxen nur (true/false) drin stehen
         */
        @SuppressWarnings("unchecked")
		public Class getColumnClass(int c) {
        	
            return getValueAt(0, c).getClass();
        }

        /*
         * Hier kann man bestimmte Zellen editierbar machen
         * Beispiel Zelle 0 nicht editierbar machen
         * if (col == 0) {
         *     return false;
         * }
         */
        public boolean isCellEditable(int row, int col) {

                return true;
        }

    }

	@Override
	public void actionPerformed(ActionEvent ae) {
		String cmd = ae.getActionCommand();
		System.out.println(cmd);
		
		if(cmd.equals("add_line")){
			System.out.println("Button print_line betätigt");
		}
	}
}

_width_array ist ein int[] array das die breite der Zellen beeinhaltet(das ist so gewollt..)
und _char_length ist ein int[] array das die Anzahl der Zeichen beeinhaltet.

und hier der Aufruf
Code:
    // Tabelle erstellen und adden
    CreateTableWithColumn table_panel = new CreateTableWithColumn(table_x, table_y, getColumnNames(), getData(), getWidthArray(), getCharLengthArray());
    frame.add(table_panel, BorderLayout.CENTER);
.
.
.
private static int[] getCharLengthArray() {
	int[] char_length = {4, 60};
	return char_length;
} 
  
private static int[] getWidthArray() {
	int[] width_array = {100, 737};
	return width_array;
}

private static String[] getColumnNames() {
	String[] column_names  = {	"Schl.", 
								"Bezeichnung"}; 

	return column_names;
}

private static Object[][] getData() {
	Object[][] data = {
			{"Spalte 1", "Spalte 2",},
			{"Hallo	", "Dachs",}
			};

	return data;
}
 
Status
Nicht offen für weitere Antworten.
Ä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
D JTable mit JTextAreas in den Zellen Allgemeine Java-Themen 8
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
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