Neu zeichnen von einer JTable

dschulz80

Grünschnabel
Hallo,
ich habe mal wieder ein kleines Problem:

Es ist so, dass ich mit Hilfe eines Button ein neues JFrame öffnen will, indem eine JScrollPane enthalten ist, und wo wiederum eine JTable eingebaut ist. Wenn dieses Fenster nun geöffnet wird und ich eine Zeitverzögerung einbaue (mittels Thread.sleep()), wird die JTable erst nach dem letzten eingefügten Datensatz gezeichnet. Was ich aber möchte ist, dass nach jedem Einfügen einer neuen Zeile die Tabelle neu gezeichnet wird. Vielleicht ist es ein Thread-Problem?!
Zum besseren Verständnis, hier einmal ein Codebeispiel (zum leichteren Testen sind mehrere Klassen in einer Datei):
Code:
package test;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;


public class Test extends JFrame {
	
	public void start() {
		
		JButton btnStart = new JButton("Starten");
		btnStart.addActionListener(new StartListener());
		btnStart.setPreferredSize(new Dimension(200, 200));
		
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(btnStart, BorderLayout.CENTER);

		this.addWindowListener(new ExitListener());
		
		this.pack();
		this.setVisible(true);
	}
	
	class StartListener implements ActionListener {

		public void actionPerformed(ActionEvent arg0) {
			
			new FensterTest().neuesFensterOeffnen();
		}		

	}
	
	public class ExitListener extends WindowAdapter {
		
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}		
		
	}	
	
	class FensterTest extends JFrame {
		
		public void neuesFensterOeffnen() {
			
			DataModel model = new DataModel();
			
			model.addColumn("Spalte 1");
			model.addColumn("Spalte 2");
			model.addColumn("Spalte 3");
			
			DataTable table = new DataTable(model);		
			JFrame fenster = new JFrame();
			
			ArrayList<String> data = new ArrayList<String>();
			
			data.add("1");
			data.add("2");
			data.add("3");
			
			model.addRow(data.toArray());
		    
		    JScrollPane panel = new JScrollPane(table.getTableHeader(),
		    		JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
	
		    panel.add(table);
		    panel.setViewportView(table);
		    panel.setPreferredSize(new Dimension(650, 350));
		    
		    fenster.getContentPane().add(panel, BorderLayout.CENTER);
		    fenster.pack();	    
		    fenster.setVisible(true);
		    
		    model.fireTableDataChanged();
		    
		    try {
				Thread.sleep(4000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			data.clear();
			data.add("4");
			data.add("5");
			data.add("6");
			
			model.addRow(data.toArray());	    
		    		
		}
	}
	
	class DataModel extends DefaultTableModel {
		
		public DataModel() {

			super();
		}
	}
	
	class DataTable extends JTable {
		
		public DataTable(DataModel model) {
			
			super(model);
		}
	}
	
	public static void main(String[] args) {
		
		new Test().start();
	}

}
 

Neue Beiträge

Zurück