jTable anpassen

Status
Nicht offen für weitere Antworten.

Senbei

Mitglied
Hallo,
ich habe gleich mehrere Probleme was die jTable angeht. Ich arbeite mit dem eclipse (3.2.1) Visual Editor (1.2.1), den finde ich auch ganz gut, vorallem weil er mir als Javanoob einiges an Syntax abnimmt.
Ich bin gerade an einem Projekt, bei dem ich Werte in eine jTable
1.) selbst eintragen kann
2.) Werte berechnen und eintragen lasse
3.) per Drag and Drop und/oder Copy&Paste einfügen kann evtl. Kontextmenü -(geht noch nicht)

Außerdem soll
* die Tabelle aus einem jTextField rauslesen können, aus wie vielen Zeilen sie bestehen soll
* per JRadioButton.isSelected() erkennen können, ob sie editierbar bzw nicht editierbar ist (selektieren soll aber gehn)
* die linke Spalte durchnummeriert sein

Zur Veranschaulichung vorab mal n Screenshot von meiner Tabelle (links):

wn_dateneingabe_2006-12-06.jpg


Der betreffende Code für die Tabelle sieht so aus:

Code:
/**
	 * This method initializes jTable_Wertetabelle	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getJTable_Wertetabelle() {
		if (jTable_Wertetabelle == null) {
			DefaultTableModel defaultTableModel = new DefaultTableModel();
			defaultTableModel.addColumn("n"); 		//Spalte1 Überschrift
			defaultTableModel.addColumn("Werte");			
			
			//Das Funktioniert (noch) nicht:
			//Irgendwie sollte diese Zeile bei Änderung von jTextField_n.getText()
			//(nochmal)aufgerufen werden
			defaultTableModel.setRowCount(Integer.parseInt(jTextField_n.getText()));

			defaultTableModel.setColumnCount(2);
			jTable_Wertetabelle = new JTable();
			jTable_Wertetabelle.setName("Wertetabelle");
			jTable_Wertetabelle.setShowGrid(true);
			jTable_Wertetabelle.setCellSelectionEnabled(true);
			jTable_Wertetabelle.setRowHeight(18);
			jTable_Wertetabelle.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
			jTable_Wertetabelle.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			jTable_Wertetabelle.setCellEditor(new TableCellEditor(){

	public Component getTableCellEditorComponent(JTable arg0, Object arg1, boolean arg2, int arg3, int arg4) {
		// TODO Auto-generated method stub
		return null;
		
	}

	public void addCellEditorListener(CellEditorListener arg0) {
	}

	public void cancelCellEditing() {
	}

	public Object getCellEditorValue() {
		// TODO Auto-generated method stub
		return null;
		
	}

	/**
	 * Tabelle nicht editierbar,
	 * wenn "Eingabe von Verteilunen" ausgewählt
         * -- FUNKTIONIERT NICHT !?
	 */
	public boolean isCellEditable(EventObject arg0) {
		//TODO Auto-generated method stub
		if (jRadioButton_Verteilungen.isSelected() == true)
			return false;
		else
			return true;
		
	}

	public void removeCellEditorListener(CellEditorListener arg0) {
	}

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

        /**
	 * Editieren abbrechen
	 * wenn "Eingabe von Verteilunen" ausgewählt
         * -- FUNKTIONIERT NICHT !?
	 */
	public boolean stopCellEditing() {
		// TODO Auto-generated method stub
		if (jRadioButton_Verteilungen.isSelected() == true)
			return true;
		else
			return false;
		
	}});
			jTable_Wertetabelle.setModel(defaultTableModel);
			jTable_Wertetabelle.getColumnModel().getColumn(0).setPreferredWidth(40);
			jTable_Wertetabelle.getColumnModel().getColumn(1).setPreferredWidth(380);

			//damit kann ich nur aus der Tablle rausDraggn, aber nicht rein:
			jTable_Wertetabelle.setDragEnabled(true);			
			//Copy&Paste bzw. DROP -Funktion später hier

			jTable_Wertetabelle.setValueAt("0x0", 0, 0);
			jTable_Wertetabelle.setValueAt("Test 0x1", 0, 1);
						
			
			
		}
		return jTable_Wertetabelle;
	}

Code für das Textfeld unten links:

Code:
	/**
	 * This method initializes jTextField_n	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getJTextField_n() {
		if (jTextField_n == null) {
			jTextField_n = new JTextField();
			jTextField_n.setBounds(new Rectangle(194, 517, 50, 20));
			jTextField_n.setPreferredSize(new Dimension(50, 20));
			jTextField_n.setText("20");
			jTextField_n.setMinimumSize(new Dimension(20, 20));	
			
			//Wenn is das Textfeld keine ganze Zahl eingegeben wird
			//erscheint rechts daneben in einem jLabel die Nachricht:
			//"Nur ganze Zahlen eingeben"
			//Wenn eine gültige Zahl eingegeben, verschindet der Text wieder
			// -- FUNKTIONIERT !
                        jTextField_n.addKeyListener(new java.awt.event.KeyListener() {
				public void keyPressed(java.awt.event.KeyEvent e) {
					// TODO Auto-generated Event stub keyPressed()					
				}
				public void keyTyped(java.awt.event.KeyEvent e) {
					try {
						Integer.valueOf(jTextField_n.getText());
						jLabel_Eingabefehler.setText("");
						}
					catch (NumberFormatException e1) {
						jLabel_Eingabefehler.setText("Nur ganze Zahlen eingeben");
					}
					if (jLabel_Eingabefehler.getText()==""){
						
					}
				}
				public void keyReleased(java.awt.event.KeyEvent e) {
				}
			});
			
		}
		return jTextField_n;


	}

Wie man das "Durchnummerieren" der ersten Spalte macht weis ich noch nicht. Mit einer for() vielleicht, wenn es nicht elleganter geht.

Ich habe auch schon einzelne Brocken, die mir die Suchfunktion zu meinen Problemen geliefert hat, ausprobiert - hat aber immer was nicht gepasst.
Hab ihr vielleicht Ideen, meinen Code um die fehlenden Features zu erweitern?

Danke vielmals jetzt schon^^
:? Senbei
 

André Uhres

Top Contributor
Senbei hat gesagt.:
* die Tabelle aus einem jTextField rauslesen können, aus wie vielen Zeilen sie bestehen soll
* per JRadioButton.isSelected() erkennen können, ob sie editierbar bzw nicht editierbar ist (selektieren soll aber gehn)
1. DefaultTableModel#setRowCount
2. "public boolean isCellEditable(int rowIndex, int columnIndex)" vom DefaultTableModel überschreiben
 

Senbei

Mitglied
Aus dieser Antwort werd' ich nicht schlau.

1. den "." durch ein "#" bringt mir den Syntaxfehler:
Multiple markers at this line:
- The methode setRowCount(int) is undefined for the type Hauptfenster.
- Syntax error on token "Invalid Charakter", invalid AssignmentOperator

2. wie und wo muss ich das reinschreiben? Wenn ich nämlich die Zeile
Code:
public boolean isCellEditable(EventObject arg0) {
mit der hier ersetze
Code:
public boolean isCellEditable(int rowIndex, int columnIndex) {
taucht ein Fehler in Zeile 26 auf:
"The type new TableCellEditor(){} nust implement the inherited abstract method Cell.isCellEditable(EventObject)"

Stehe aufm Schlauch...

edit:/> Zu der Drag'n'Drop Geschichte.... sehe ich das richtig, dass man in eine jTable nicht "reindroppen kann"? Dann wäre das Thema gegessen :B
(seihe hier)
 

André Uhres

Top Contributor
1. # gehört nicht zur Syntax, wird aber oft in den Beschreibungen benutzt um die Klasse zu identifizieren, zu der die Methode gehört.

2. "public boolean isCellEditable(int rowIndex, int columnIndex)" ist eine Methode vom DefaultTableModel, wie ich bereits sagte.

EDIT: Bei Swing-Komponenten, die von Natur aus kein (oder nur begrenzt) Drag-and-Drop unterstützen, kann man dies nachprogrammieren.
 

André Uhres

Top Contributor
Eine Methode überschreibt man, indem man die Klasse erweitert zu der sie gehört, so wie du's beim TableCellEditor gemacht hast.
 

Senbei

Mitglied
André Uhres hat gesagt.:
Bei Swing-Komponenten, die von Natur aus kein (oder nur begrenzt) Drag-and-Drop unterstützen, kann man dies nachprogrammieren.
Ist denn dann Copy and Paste einfacher zu aktivieren? Evtl. über ein Kontextmenü?
Wenn ja, wie heisst denn die "Methode"?

edit:\> ich sehe gerade, dass mit einem 'gemeinsamen' Clipboard (jtable <-> z.B. Excel)

Stefan Matthias Aust hat gesagt.:
Für Copy&Paste muss ein Applet vertrauenswürdig und damit signiert sein.
In einigen Java-Versionen funktionierte das Clipboard auch ohne
Signierung, dass ist/war aber ein Bug. Innerhalb des Applets könnte man
in jedem Fall ein eigenes Clipoard benutzen, nur die Kommunikation mit
der Außenwelt ist eingeschränkt.

Ok, ich kann mich damit abfinden wenn es nicht funktioniert, dann werd ich diese Funktion eben weglassen. Der Aufwand wäre dann zu hoch...
 

Senbei

Mitglied
Also das Problem mit der Editierbarkeit habe ich endlich lösen können, dazu musste ich die Zeile 9 (des ersten Codestücks) ändern/erweitern zu
Code:
DefaultTableModel defaultTableModel = new DefaultTableModel(){
				/**
				 * Tabelle nicht editierbar,
				 * wenn "Eingabe von Verteilunen" ausgewählt
				 */
				public boolean isCellEditable(int row, int col){
					if(col==0 || jRadioButton_Verteilungen.isSelected()==true)
						return false;
					else return true;
				}
			};

Mein nächstes Problem ist nun, dass ich nicht weis, wie ich die Methode 'cancelCellEditing' (Zeile 39) aufrufen soll.
Wenn 'neu berechnen' Button gedrückt wird soll dieses ausgeführt werden:
"Breche das Editieren der Tabelle ab (soll den selben Effekt bewirken wie 'beende die Eingabe durch Enter')."

Entweder funktioniert das, indem ich die Bedingung ('neu berechnen' wurde gedrückt) direkt in der Methode (Zeile 37-38) stelle:
Code:
public void cancelCellEditing() { 
  if(jButton_neuBerechnen./* wurde gedrückt */ == true
  fireEditingCanceled();   // <-- Fehler: The Method fireEditingCancelled() is undefined for the type new TableCellEditor(){}
   }

Oder indem ich mich schon im 'ActionListener' des 'neu berechnen' Buttons befinde und dort die Methode aufrufe:
Code:
//geht nicht
jTable_Wertetabelle.TableCellEditor.cancelCellEditing();
...funktioniert aber beides so nicht, aber ich denke ihr versteht was ich brauche. Eine Lösung würde mir schon reichen :p
 
B

Beni

Gast
In dem ActionListener:
Code:
jTable_Wertetabelle.getCellEditor().cancelCellEditing();
Mach aber noch einen Test rein, das Resultat von "getCellEditor" kann null sein!

P.S. eine Bemerkung zum Textfeld mit dem KeyListener: da hast du keine Garantie, dass der in jedem Fall anspricht, wenn der Text verändert wird. Mit einem DocumentListener, dem du dem Document (an das Document kommst du über "JTextField#getDocument()") hinzufügst, hättest du die Garantie :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Swing JTable mit Daten - Reihen-Größe anpassen AWT, Swing, JavaFX & SWT 0
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
I JTable Spalten automatisch dem Inhalt anpassen! AWT, Swing, JavaFX & SWT 6
D JTable width automatisch anpassen AWT, Swing, JavaFX & SWT 4
R JTable: Spaltenbreite automatisch anpassen AWT, Swing, JavaFX & SWT 3
X jTable anpassen AWT, Swing, JavaFX & SWT 2
N JTable Zellenhöhe an Zeilenanzahl anpassen AWT, Swing, JavaFX & SWT 3
W Zellengröße in Jtable anpassen AWT, Swing, JavaFX & SWT 3
F Swing Höhe eines Headers einer JTable anpassen AWT, Swing, JavaFX & SWT 4
M Swing JTable anpassen AWT, Swing, JavaFX & SWT 6
hdi Swing JTable: Selektion beim Umsortieren anpassen AWT, Swing, JavaFX & SWT 7
G JSplitPane unf JTable automatisch anpassen AWT, Swing, JavaFX & SWT 2
F JTable: Spaltenbreiten an Breite der Zelleninhalte anpassen AWT, Swing, JavaFX & SWT 5
Z Column Breite in JTable automatisch an Inhalt anpassen AWT, Swing, JavaFX & SWT 3
G JTable auf Druckausgabe anpassen AWT, Swing, JavaFX & SWT 5
G Zeilenhöhe einer JTable anpassen AWT, Swing, JavaFX & SWT 11
I Swing JTable zeichnet kein vertical Grid AWT, Swing, JavaFX & SWT 6
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen


Oben