zeilen in echtzeit in jtable einfügen

acky

Mitglied
hi,

mit folgender methode füge ich eine reihe in einen jtable ein (beim abfragen
neuer nachríchten). es werden jedoch erst bei beendigung des durchgangs
alle reihen eingefügt. da ich jedoch die zeilen der reihe nach im jtable erscheinen
lassen möchte, habe ich mir sagen lassen, ich benötige ein pendant
zur methode "Application.DoEvents()", die wohl "die Ausführung
aller Messages in MessageLoop anfordert". wie kann ich dieses in java erreichen?

danke,
acky

public static void insertRow( Mail email )
{
Vector rowVector = new Vector();
rowVector.add( email.getNumberAsString() );
rowVector.add( email.getSubject() );
rowVector.add( email.getSender() );
rowVector.add( email.getDate() );

mailHash.put( rowVector, email );

defaultTableModel.insertRow( 0, rowVector );

table.updateUI();
//Ergebnis: OS sendet WM_PAINT an MessageLoop von Fenster
}
 
Hallo!

Siehe Beispiel:

Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.TimerTask;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.table.DefaultTableModel;

/*
 * JTableExample.java
 *
 * Created on 31. März 2004, 20:33
 */

/**
 *
 * @author  Administrator
 */
public class JTableExample extends JFrame {

	// Variables declaration - do not modify
	private JButton btnAddRows, btnStop;
	private JPanel btnPanel;
	private JPanel jPanel1;
	private JScrollPane scrollPane;
	private JTable table;
	private DefaultTableModel model;

	private ArrayList rows;

	private Timer timer;
	private TimerTask timerTask;
	private String[] columnHeaders = new String[] { "A", "B", "C", "D" };

	// End of variables declaration

	/** Creates new form JTableExample */
	public JTableExample() {
		initComponents();
	}

	private void initComponents() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		GridBagConstraints gridBagConstraints;

		jPanel1 = new JPanel();
		btnPanel = new JPanel();
		btnAddRows = new JButton();
		btnStop = new JButton("Stop");
		scrollPane = new JScrollPane();
		table = new JTable();

		getContentPane().setLayout(new FlowLayout());

		setTitle("JTableExample");
		setResizable(false);

		jPanel1.setLayout(new GridBagLayout());

		jPanel1.setBackground(new Color(102, 153, 255));
		jPanel1.setMinimumSize(new Dimension(320, 240));
		jPanel1.setPreferredSize(new Dimension(320, 240));
		btnPanel.setBackground(new Color(255, 153, 0));
		btnPanel.setMinimumSize(new Dimension(320, 50));
		btnPanel.setPreferredSize(new Dimension(320, 50));
		btnAddRows.setText("Add new Rows (smooth)");

		btnAddRows.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				btnAddRowsActionPerformed(evt);
			}
		});

		btnStop.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				if (timer != null) {
					System.out.println("Timer stopped....");
					timer.stop();
				}
			}
		});

		btnPanel.add(btnAddRows);
		btnPanel.add(btnStop);

		gridBagConstraints = new GridBagConstraints();
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 1;
		jPanel1.add(btnPanel, gridBagConstraints);

		scrollPane.setMinimumSize(new Dimension(320, 190));
		scrollPane.setPreferredSize(new Dimension(320, 190));

		rows = new ArrayList(4) {
			{
				add(new Object[] { "A1", "B1", "C1", "D1" });
				add(new Object[] { "A2", "B2", "C2", "D2" });
				add(new Object[] { "A3", "B3", "C3", "D3" });
				add(new Object[] { "A4", "B4", "C4", "D4" });
			}
		};

		model = new DefaultTableModel(transform(rows), columnHeaders);

		table.setModel(model);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		scrollPane.setViewportView(table);

		jPanel1.add(scrollPane, new GridBagConstraints());

		getContentPane().add(jPanel1);

		//timerTask = new TimerTask();

		pack();
	}

	/**
	 * @param rows
	 */
	private Object[][] transform(ArrayList rows) {
		// TODO Auto-generated method stub

		Object[][] oa =
			new Object[rows.size()][((Object[]) rows.get(0)).length];

		for (int i = 0; i < oa.length; i++) {
			for (int j = 0; j < oa[i].length; j++) {
				oa[i][j] = ((Object[]) rows.get(i))[j];
			}
		}

		return oa;

	}

	private void btnAddRowsActionPerformed(ActionEvent evt) {
		// Add your handling code here:

		System.out.println(("Starting timer..."));

		timer = new Timer(1000, new ActionListener() {

			public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub

	int cnt = rows.size();

				System.out.println("Adding Row " + ++cnt);
				rows.add(
					new Object[] {
						"A" + cnt,
						"B" + cnt,
						"C" + cnt,
						"B" + cnt });
				table.setModel(
					new DefaultTableModel(transform(rows), columnHeaders));
				table.updateUI();
			}

		});
		timer.start();

	}

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		new JTableExample().show();
	}

}

Gruß Tom
 

Neue Beiträge

Zurück