JTable Hilfe für einen Anfänger

Lautsprecher

Erfahrenes Mitglied
Hi,
ich bin gerade dabei eine Swing Applikation mit dem Visual Editor zu erstellen.
Kurze Logik zu meinem JFrame:
Eingabe des Mittarbeiternames in ein Textfeld. Mit Klick auf dem "Kommen-Button" wird
die aktuelle Systemzeit in einem Textfeld angezeigt. Gleichzeitig soll die Zeit dann auf
dem Server (über SQL) abgespeichert werden und die aktualisierten Daten wieder im
JFrame in der JTable angezeigt werden.

Soweit ich weiß werden die Daten und die Anzeige des JTables getrennt. Ich bin also momentan erst dabei die Spaltennamen in meinem JFrame anzuzeigen.

Dabei habe ich mir folgendes gedacht:


Code:
private DefaultTableModel getDefaultTableModel() {
		if (defaultTableModel == null) {
		defaultTableModel = new DefaultTableModel();
		}
		return defaultTableModel;
	                }  
	
		private JTable getJTable() {
		if (jTable == null) {
			String rowData[][] = 
{
				      { "","","","","","","" }, 
				    };

			 String  columnNames[] = {
				      "Pers.Nr.", "Nachname","Kommen","Datum","Gehen","Datum","L"
				    };
			jTable = new JTable(rowData, columnNames);
			jTable.setShowGrid(true);
			jTable.setColumnSelectionAllowed(true);
			

jTable.setSelectionModejavax.swing.ListSelectionModel.SINGLE_SELECTION);
jTable.setAutoResizeModejavax.swing.JTable.AUTO_RESIZE_OFF);
jTable.setBounds(new java.awt.Rectangle(0, 0, 0, 0));
jTable.setModel(getDefaultTableModel());
jTable.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
		}
		return jTable;
	}
	
private JScrollPane getJScrollPane() {
	if (jScrollPane == null) {
		jScrollPane = new JScrollPane();
		jScrollPane.setBounds(new java.awt.Rectangle(29,168,618, 481));
		jScrollPane.setViewportView(getJTable());
		}
		return jScrollPane;
	}

Leider erscheint aber beim Aufruf nur eine graue Maske! Was habe ich dabei falsch gemacht, bzw. muss ich den Code irgendwo anders einbauen?

2. Wie bereite ich die JTabelle auf den Datenzugriff per SQl vor?

Danke
 
Zuletzt bearbeitet:
Moin,
- Welches Layout benutzt Du, wo fügst Du die ScrollPane ein?
- Sind die Bounds der ScrollPane zu klein?
- Siehst Du auch nichts, wenn Du das Frame vergrößerst?
- Beachte bei der Datenhaltung, dass die Idee mit den rowData nur schwer zu aktualisieren ist. Besser ist eine ArrayList oder ein Vector. Und am flexibelsten ist ein komplett eigenes Model, z.B. von DefaultTableModel abgeleitet.
 
Zawus

Ich poschte hier einfach mal n Beischpielchen

Code:
import javax.swing.*;

public class SimpleTable
{
  public static void main( String args[] )
  {
    String rowData[][] = {
      { "Japan", "245", "testlauf", "test" }, { "Japan", "245", "maja", "test" }, 
	  { "Japan", "245", "maja", "test" }, { "Japan", "245", "maja", "test" }, 
	  { "Japan", "245", "maja", "test" }, { "Japan", "245", "maja", "test" }, 
    };

    String  columnNames[] = {
      "Land", "Minuten", "noans", "und no ans"
    };

    JTable table = new JTable( rowData, columnNames );
    
    JFrame frame = new JFrame();


	// Beachte hier den JScrollPane
    frame.getContentPane().add(new JScrollPane(table));
   
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.pack();
    frame.setVisible( true );
  }
}

Hoffentlich hilfts mfg Rmi
 
Also erstmal Hallo ihr Beiden,
danke für die Unterstützung!!

Nach langem HickHack und ausprobieren habe ich mein Problem gelöst:

Code:
private JScrollPane getJScrollPane() {
		
	if (jScrollPane == null) {
	
	String rowData[][] = new String[][]
	{
					
                {"12345","X","06:00:00","12.09.2005","14:00:00","12.09.2005","*"}
	};
			
	String columnNames[] = new String[]
	{
				"Pers.Nr","Nachname","Kommen","Datum","Gehen","Datum","L"	
			};
		
	JTable table = new JTable(rowData,columnNames);
	DefaultTableCellRenderer ren = new DefaultTableCellRenderer();
	ren.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
	DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
	renderer.setHorizontalAlignment(DefaultTableCellRenderer.LEFT);
			
	table.setShowGrid(true);
	table.setColumnSelectionAllowed(true);
	table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
	table.sizeColumnsToFit(true);
	table.setBounds(new java.awt.Rectangle(0, 0, 0, 0));
	table.getColumnModel().getColumn(0).setPreferredWidth(150); 
	table.getColumnModel().getColumn(1).setPreferredWidth(370); 
	table.getColumnModel().getColumn(2).setPreferredWidth(120); 
	table.getColumnModel().getColumn(3).setPreferredWidth(120); 
	table.getColumnModel().getColumn(4).setPreferredWidth(120); 
	table.getColumnModel().getColumn(5).setPreferredWidth(120); 
	table.getColumnModel().getColumn(6).setPreferredWidth(30); 
table.setComponentOrientationjava.awt.ComponentOrientation.LEFT_TO_RIGHT);
/*table.getColumnModel().getColumn(0).setHeaderRenderer(renderer);
table.getColumnModel().getColumn(1).setHeaderRenderer(renderer);*/
table.getColumnModel().getColumn(2).setCellRenderer(ren);
table.getColumnModel().getColumn(3).setCellRenderer(ren);
table.getColumnModel().getColumn(4).setCellRenderer(ren);
table.getColumnModel().getColumn(5).setCellRenderer(ren);
table.getColumnModel().getColumn(6).setCellRenderer(ren);
			
/*table.setModel(getDefaultTableModel());*/
			
jScrollPane = new JScrollPane(table);
jScrollPane.setBounds(new java.awt.Rectangle(29, 168, 618, 481));
jScrollPane.setViewportView(table);
}
return jScrollPane;
	}

Jedoch nochmal zu deinen Fragen Snape:
1.Hab mein Layout auf null gesetzt um mit den Viusal Editor richtig arbeiten zu können
2. und 3. Größe stimmt soweit mit:
Code:
this.setExtendedState(JFrame.MAXIMIZED_BOTH);

4. DATENHALTUNG......... Und da wollte ich jetzt nochmal was fragen. Da gehts jetzt dann glaub ich wirklich ans eingemachte!
Da ich totaler Anfänger bin würde es fürs erste schon reichen, wenn mir jemand kurz die nun richtige Vorgehensweise erklären könnte, damit ich mich dann selbst weiter schlau machen kann:

Folgendes Problem: SQL-Zugriff auf Daten eines Servers, Die Daten sollen dann in dieser JTable ausgegeben werden. Verändert und wieder gespeichert werden.

Soweit ich weiß sollte ich jetzt am Anfang ein TableModel anlegen, wie funktioniert das und wie gehts dann weiter

Hasta luego :confused:
 
Code:
Tag RMI,
Dein Beispiel wird Probleme bereiten beim Aktualisieren der Tabellendaten nach einer DB-Abfrage.

Das hab ich auch nur geposted damit er den grundliegenden Aufbau mit dem JScrollPane sieht.

Mfg Rmi
 
http://www.tutorials.de/tutorials182757.html&highlight=JTable

Änderungen in dem Table direkt in die Datenbank schreiben

http://www.tutorials.de/tutorials208289.html&highlight=JTable

Zeilen anhängen

http://www.tutorials.de/tutorials215858.html&highlight=JTable

Zeilen ausblenden


Für das auslesen der Daten habe ich damals eine Schleife genutzt, habe SPALTE für SPALTE gefüllt und das hat wunderbar funktioniert. Ich such dir mal n Beispiel raus und poste es. Kann aber n bisschen dauern.

Mfg Rmi
 
Hier hassu

Code:
	//statem = SELECT blabla FROM ugu WHERE gager...
	public static void excecuter(String statem)
	{			
		try {			
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			conn = DriverManager.getConnection("jdbc:odbc:Inventix", "getInside", "getInside");	
			stmt = conn.createStatement();
			
			results = stmt.executeQuery(statem);

				while (results.next())
				{
					data = results.getString(1);
					try 
					{
						table.resultTable.setValueAt(data, intRowCount, intColumnCount);
					}catch (Exception ex)
					{
						//Wenn keine Zeilen mehr vorhanden sind soll man neue anfügen
						
						DefaultTableModel m = (DefaultTableModel) table.resultTable.getModel();
						m.insertRow(table.resultTable.getRowCount(), new Object[6]);
						table.resultTable.setValueAt(data, intRowCount, intColumnCount);
					}
					intRowCount++;
				}
				
				intRowCount = 0;
				intColumnCount++;
			
			results.close();
			stmt.close();
			conn.close();
				
		} catch (ClassNotFoundException e) {
				e.printStackTrace();
					
		}catch (SQLException e1) {
			 	e1.printStackTrace();
		}
	}
 
Zurück