Problem mit JTable

Status
Nicht offen für weitere Antworten.

horschd

Mitglied
Hallo Miteinander! :)

Ich habe ein Problem mit einer JTable.
Und zwar möchte ich, dass der User Werte eingibt, und diese dann intern weiterverarbeiten. Die Tabelle muss dazu zweimal mit Werten gefüllt werden. Klickt man auf den "finish"-Button, so beginnt der nächste Füll-Vorgang. Das funktioniert soweit auch, bis auf den Fehler, dass man jedesmal, bevor man den "finish"-Button drückt, mit der Maus noch in eine andere Zelle der Tabelle als in die zuletzt-wert-eingegebene klicken muss, da es sonst, wenn man den Wert aus dieser Zelle auszulesen versucht eine NumberFormatException gibt. Ich verwende in meiner Tabelle ein eigenes TableModel und einen eigenen TableCellRenderer (weiss nicht, ob das für diese Frage von Belang ist).
Ich habe schon versucht, statt dem Mausklick auf eine andere Zelle, vom Programm aus eine andere Zelle zu selektionieren. und zwar so:
tabelle.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
tabelle.setColumnSelectionAllowed( true );
tabelle.setRowSelectionAllowed( true );
tabelle.changeSelection( count+2, count+2, false, false );
Das geht zwar, aber die Exception bekomme ich dann trotzdem.
Der andere Veruch war, die Zelle upzudaten. Mit:
tabelle.tableChanged( new TableModelEvent( tabelle.getModel(), tabelle.getSelectedRow(), tabelle.getSelectedRow(),
tabelle.getSelectedColumn(), TableModelEvent.UPDATE));
Aber die Exception will nicht weg! ???:L

Könnt ihr mir helfen?

Hier ist noch der Code meiner Tabellen-Klasse:

Code:
public class tabletest extends JFrame { 
    
   JTextField input;
   JTable tabelle;
   int count;
   int verteilt = 0;
   int bekommen = 0;
   int whichTab = 0; //Sympathien => whichTab = 0,      Einfluss => whichTab = 1
   String[] names = null;
   int[][] sympathien = null;
   int[][] einfluss = null;
   tabletest tabl = null;
   
   public tabletest(MyTableModel tableModel) {
   	
   	   super("tabletest"); 
   	   tabl = this;
   	   setSize(1000, 600);
   	   
	   	this.getContentPane().setLayout(new GridLayout(2, 2, 0, 0));
		tabelle = new JTable(tableModel);
		int cols = tabelle.getColumnModel().getColumnCount();
	
		for(int i=0; i<cols; i++){
			tabelle.getColumnModel().getColumn(i).setMinWidth(60);
		}
		tabelle.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
		tabelle.setTableHeader(null);
		tabelle.setDefaultRenderer(Object.class, new MyCellRenderer());
	
		JScrollPane scrollPane = new JScrollPane ( tabelle );
		
		JLabel labeladdname = new JLabel("Name hinzufuegen");
		input = new JTextField(50);
		input.setText("namen hinzufuegen und sympathie-bewertungen eingeben");
	
		JButton addname = new JButton("Add");
		JButton finish = new JButton ("finish");
		JButton remove = new JButton("remove");
	
		Container c = this.getContentPane();
	    GridBagLayout gbl = new GridBagLayout();
	    c.setLayout( gbl );
	    //                                   x  y  w  h  wx   wy
	    addComponent( c, gbl, scrollPane,	 0, 0, 5, 2, 1.0, 1.0 );
	    addComponent( c, gbl, labeladdname,	 0, 2, 1, 1, 1.0, 0.0 );
	    addComponent( c, gbl, input, 		 0, 3, 1, 1, 1.0, 0.0 );
	    addComponent( c, gbl, addname,		 1, 3, 1, 1, 1.0, 0.0 );
	    addComponent( c, gbl, remove,			 2, 3, 1, 1, 1.0, 0.0 );
	    addComponent( c, gbl, finish,		 4, 3, 1, 1, 1.0, 0.0 );
	
		this.setVisible(true); 
		
		count = 1;
	
		input.addKeyListener(new KeyAdapter() 	{
					public void keyPressed (KeyEvent e){
						char c = e.getKeyChar();
						if (c == KeyEvent.VK_ENTER) {	
							if (count <= 0) count = 1;
							tabelle.setValueAt(input.getText(),0,count);
							tabelle.setValueAt(input.getText(),count,0);
							tabelle.setValueAt("0",count,count);
							input.setText("");
							++count;	
		                               }
                                        }
					
					public void keyReleased (KeyEvent e) {}
					
					public void keyTyped(KeyEvent e) 
					{
						
					}
				});
		
		input.addMouseListener(new MouseListener(){
				
			public void mouseClicked(MouseEvent e){
				input.setText("");
			}
			public void mouseEntered(MouseEvent e){}
	      
			public void mouseExited(MouseEvent e){}
	      
			public void mousePressed(MouseEvent e){}
	       
			public void mouseReleased(MouseEvent e){}	
		});
		
		addname.addActionListener( new ActionListener() 
				{
					public void actionPerformed( ActionEvent e ) 
					{
						if (count <= 0) count = 1;
						tabelle.setValueAt(input.getText(),0,count);
						tabelle.setValueAt(input.getText(),count,0);
						tabelle.setValueAt("0",count,count);
						input.setText("");
						++count;						
					}
				});
		
		remove.addActionListener( new ActionListener() 
				{
					public void actionPerformed( ActionEvent e ) 
					{
						--count;
						if (count <= 0) count = 1;
						tabelle.setValueAt("",0,count);
						tabelle.setValueAt("",count,0);
						tabelle.setValueAt("",count,count);				
					}
				});
		
		finish.addActionListener( new ActionListener() 
			{
				public void actionPerformed( ActionEvent e ){
					
//					//schon probiertes, die NFE wegzubekommen, nicht funktionierendes:
//					tabelle.tableChanged(new TableModelEvent(tabelle.getModel(), 
// tabelle.getSelectedRow(), tabelle.getSelectedRow(), tabelle.getSelectedColumn(), TableModelEvent.UPDATE));
//					
//					tabelle.setSelectionMode( ListSelectionModel.SINGLE_SELECTION  );
//					tabelle.setColumnSelectionAllowed( true );
//					tabelle.setRowSelectionAllowed( true );
//					tabelle.changeSelection( count+2, count+2, false, false );
					
					
					boolean weitermachen = true;
					String[] names = new String[count-1];
					int[][] values = new int[count-1][count-1];	
					//namen einlesen
					for (int i = 1; i<count;++i) {	
						names[i-1] = (String)tabelle.getValueAt(0,i);
					}
					
					//bewertungen einlesen
					for (int i = 1; i < count; ++i) {
						for (int j = 1; j < count; ++j) {	
							try{	
								values[i-1][j-1] = Integer.parseInt(tabelle.getValueAt(i,j).toString());
								input.setText("tut des jetztet???");
							}catch(NumberFormatException nfe){
								System.out.println(nfe.toString());
								weitermachen = false;
							}
						}								
					}
		
					if(weitermachen){
						for (int i = 1; i < count; ++i) {
							for (int j = 1; j < count; ++j) {	
								tabelle.setValueAt("", i, j);
							}								
						}			
						if(whichTab == 0){
							for(int i = 1; i<count; i++){
								tabelle.setValueAt(new Integer(0), i, i);
							}
							input.setText("Einfluss-Bewertungen eingeben.");
							whichTab = 1;	
						}else{
							tabl.setVisible(false);
						}
					}
					
				}
			});
   } 
     
   public static void main(String argv[]) { 
    	MyTableModel m = new MyTableModel();
    	tabletest frame = new tabletest(m,); 	
   }
    
    static void addComponent( Container cont,
            GridBagLayout gbl,
            Component c,
            int x, int y,
            int width, int height,
	            double weightx, double weighty )
	{
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.gridx = x; gbc.gridy = y;
		gbc.gridwidth = width; gbc.gridheight = height;
		gbc.weightx = weightx; gbc.weighty = weighty;
		gbl.setConstraints( c, gbc );
		cont.add( c );
	}
}


class MyTableModel extends AbstractTableModel{
	
	private Object[][] objects;
	
	public MyTableModel(){
		super();
		objects = new Object[50][50];
		for(int i = 0; i<objects.length; i++){
			for(int j = 0; j<objects.length; j++){
				objects[i][j] = "";
	}}}
	 public int getRowCount(){    
                return objects.length;
	 }
	 public int getColumnCount(){
	 	return objects[0].length;
	 }  
	 public Object getValueAt(int row, int column){  
	 	return objects[row][column];
	 }	
	 public void setValueAt(Object o, int row, int col){
	  	objects[row][col] = o;
	  	fireTableCellUpdated(row, col);
	 } 
	 public boolean isCellEditable(int row, int col){
	  	return true;
	 }
}


class MyCellRenderer extends DefaultTableCellRenderer{
	int counter = 0;
	public MyCellRenderer(){
		super();
		setOpaque(true);
	}	
}
 
B

Beni

Gast
Es gibt einige Einträge "" (leerer String) in der Tabelle. Diese Strings können nicht in Integer geparst werden (sie sind ja keine Zahlen, sie sind "nichts"). Deshalb die Exception.

Am einfachsten überprüfst du einfach auf "string.length() == 0" bevor du sie parst.
Was in die Richtung:
Code:
String string = tabelle.getValueAt(i,j).toString();
                         if( string.length() == 0 )
                             values[i-1][j-1] = 0;
                         else
                             values[i-1][j-1] = Integer.parseInt(string);

Eine nette Sache gibt es noch: du könntest dein Model so abändern, dass es "Integer" anstelle von "Objects" speichert. Wenn du dann int der Methode "getColumnClass" "return Integer.class" schreibst, kann der Benutzer nur Integer eingeben :wink: (aber das steht alles in unserer FAQ).
 

horschd

Mitglied
Hey Beni! :)

Vielen Dank! Das mit dem Testen, ob was drinsteht, das ist gut! :) hatte auch schon gedacht, dass es eigentlich gut wäre, das festzustellen ob auch in allen Zellen etwas steht, bevor es Exceptions gibt! Habe dein Codestück jetzt eingebaut.
Das Dumme ist nur, der spezielle Fehler verschwindet dadurch noch nicht.
Es gibt jetzt zwar keine Exceptions mehr, aber dafür wird jetzt der Wert der zuletzt editierten Zelle immer auf 0 gesetzt. Und das obwohl ich einen Wert in die Zelle eingetragen habe! Aber irgendwie registriert das Programm den Wert nicht, bevor nicht mit der Maus woanders hingeklickt wird. Woran könnte das dann liegen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2
W Problem JTable Java Basics - Anfänger-Themen 5
K Problem mit JTable Daten-darstellung Java Basics - Anfänger-Themen 6
P [JTable] Problem mit repaint() Java Basics - Anfänger-Themen 2
W Problem mit Serialisierung von jTable Java Basics - Anfänger-Themen 15
K Problem mit jtable Java Basics - Anfänger-Themen 2
D Problem mit Mouselistener und jtable Java Basics - Anfänger-Themen 7
R Problem mit JTree und JTable Java Basics - Anfänger-Themen 16
P JTable Problem ! Bitte um Hilfe ! Java Basics - Anfänger-Themen 8
G JTable in JSpltpane Problem Java Basics - Anfänger-Themen 5
S JTable Problem mit einzufügendem Array Java Basics - Anfänger-Themen 6
D Dringendes Problem mit JTable Java Basics - Anfänger-Themen 2
G Problem mit Methode getColumnCount (JTable) Java Basics - Anfänger-Themen 3
M Problem mit Code aus JTable Tutorial Java Basics - Anfänger-Themen 11
S Problem mit JTable Java Basics - Anfänger-Themen 2
C Problem mit Spring Boot Dependency Injection Java Basics - Anfänger-Themen 12
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
M Problem mit Klassenverständnis und Button Java Basics - Anfänger-Themen 8
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
H Problem mit Verzweigungen Java Basics - Anfänger-Themen 6
H Problem mit Rückgabewert Java Basics - Anfänger-Themen 7
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
A Code Problem Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
J Problem mit "ArrayIndexOutOfBoundsException" Java Basics - Anfänger-Themen 11
K jackson Mapping - Problem mit Zeitzonen Java Basics - Anfänger-Themen 10
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
D Schleifen Problem Java Basics - Anfänger-Themen 2
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
T Problem mit Lehrzeichen und String bei einfacher Chiffre Java Basics - Anfänger-Themen 8
J extends Problem Java Basics - Anfänger-Themen 2
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
J Allgemeines Problem mit Klassen Java Basics - Anfänger-Themen 5
U Problem mit dem initialisieren meines Strings in einer Schleife Java Basics - Anfänger-Themen 5
amgadalghabra algorithmisches Problem Java Basics - Anfänger-Themen 19
J Traveling Salesman Problem [Arrays] Java Basics - Anfänger-Themen 9
R ArrayList Problem Java Basics - Anfänger-Themen 6
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
C RegEx Problem Java Basics - Anfänger-Themen 4
J Anfänger TicTacToe, Problem bei Gewinnoption, sowohl Unentschieden Java Basics - Anfänger-Themen 8
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
M Input/Output Fallunterscheidung Problem Java Basics - Anfänger-Themen 17
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
Splayfer Java Array Problem... Java Basics - Anfänger-Themen 2
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
G Subset sum problem mit Backtracking Java Basics - Anfänger-Themen 18
N Problem mit Scanner Java Basics - Anfänger-Themen 2
J Klassen Problem Java Basics - Anfänger-Themen 8
A Out.format problem. Java Basics - Anfänger-Themen 3
J Problem bei der Programmierung eines Tannenbaums Java Basics - Anfänger-Themen 9
A Array problem Java Basics - Anfänger-Themen 16
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
W Remote Method Invocation RMI - Problem Java Basics - Anfänger-Themen 0
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
A Problem bei returnen eines Wertes Java Basics - Anfänger-Themen 6
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben