eigenes JTable Modell mit Übernahme des Vector Vector Konstruktors

Malte Roessner

Grünschnabel
Hallo Leute,

ich habe meine Daten so vorliegen dass ich den Standard Vector - Vector - Konstruktor zum aufbauen einer Tabelle benutzen kann.
nun bin ich vor dem Problem, dass meine Tabelle keinesfalls editierbar sein darf.
wie kann ich den Konstruktor Vector Vector in ein eigenes Table Modell übernehmen und wie mache ich dann beim aufbauen meiner Tabelle dann den Aufruf zum füllen der Tabelle.

Danke schonmal und Gruß
Malte Roessner
 
Hallo,
nunja ich würde ungerne n eigenes Table Modell nur für nicht Editierbarkeit der Zeilen schreiben müssen. vielleicht gehts ja auch anders?....
ich poste mal meinen Versuch eines eigenen TableModels, der allersings leider nicht funktioniert
Über response.getArray im Konstruktor bekomme ich meinen Tabellen Inhalt entsprechend im Vector von Vectoren Format... daher würde ich eigentlich gerne den Konstruktor table = new JTable(Vector, Vector) wenn schon ein TableModell nötig sein sollte gerne beibehalten...

wenn ich mit dem Modell arbeite bekomme ich eine leere Tabelle angezeigt...
Leider!

Danke an alle die mir bisher sehr weitergeholfen haben...
Gruß Malte
Code:
package ch.objeng.appl.eias.awf.worklet.ext.std.ORE;

import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.*;

import java.awt.event.*;
import java.awt.BorderLayout; 

import java.util.Vector;
/**
 * @author Malte Roessner
 * @version 0.1, 26.02.2006
 * @since AWF 2.2.0
 */
public class AuswahlGui	extends JDialog 
						implements ActionListener{
	/*
	 * The Construtor sets the common Data for the
	 * folowing Dialog 
	 */
	public AuswahlGui(Response response){
		//allgemeine Daten des Dialoges festlegen
		this.setAlwaysOnTop(true);
		this.tableinhalt=response.getArray();
		this.setLayout(null);
		this.setSize(450,250);
		java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
		setLocation(((screenSize.width/2)-(this.getWidth()/2)),((screenSize.height/2))-(this.getHeight()/2));		
		this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		this.setTitle("   -- Vorschläge --   ");
		this.setResizable(false);
		this.setModal(true);		
	}
	
	/**
	 * the Actions are done here
	 */	
	public void actionPerformed(ActionEvent event) {
		if( event.getSource() == ok_Button  ){
			if (table.getSelectedRow()!= -1){
				int	index = table.getSelectedRow();
				reply = table.getValueAt(index ,0).toString(); 
			}else {
				reply = table.getValueAt(0 ,0).toString(); 
			}
			closeDialog();
		}
	}
	/**
	 * adds the Components to the Modal Dialog
	 * a JTable and a JButton are added 
	 * for providing a choose if there are more than one result possible from the Engine
	 *
	 */
	public void addComponenten(){
		// add Components
		ok_Button = new JButton("OK");
		ok_Button.setBounds(125,180,200,25);
		
		Vector tmp_vector = (Vector)(tableinhalt.elementAt(0));
		//the names of the columns of the JTable are set here
		for (int i=0; i<tmp_vector.size(); i++){
			spaltennamen.addElement(""+(i+1)+"");
		}
		
		//create JTable
		table = new JTable( tableinhalt, spaltennamen );
		table.getTableHeader().setReorderingAllowed(false);
	    //table = new JTable(new MeineTab());
        scrollpane = new JScrollPane(table);
        scrollpane.setBounds(5,5,this.getWidth()-18,this.getHeight()/6*4);
        
        //add ActionListener to JButton 
		ok_Button.addActionListener(this);	
		
		//add Components to JDialog
		this.add(ok_Button);
		//this.add(ok_Button, BorderLayout.SOUTH);
		//this.add(scrollpane, BorderLayout.CENTER);
		this.add(scrollpane);
		this.setVisible(true);
		this.setEnabled(true);
	}
	
	/**
	 * Methode is shouted
	 * if everything is done to close the JDialog
	 *
	 */
	public void closeDialog(){
		this.setVisible(false);
		this.dispose();
	}
	
	/*
	 * Method to get the Chose of the Table for other using classes.
	 * @return String reply  chose of table row field 0,0 
	 */
	public String getReply(){
		return reply;
	}
	///****neuuuuuu
	class MeineTab extends DefaultTableModel{
		Vector columnNames = spaltennamen; 
		Vector data = tableinhalt;
		
		public boolean isCellEditable(int row, int col) {
	            //Note that the data/cell address is constant,
	            //no matter where the cell appears onscreen.
	      		 return false;
	    }
		
	
		
	}
	
	
	//*******************
	
	/*
	 * Member Vars are set here
	 */
	Vector tableinhalt;
	Vector spaltennamen =  new Vector();
	JButton ok_Button;
	JScrollPane scrollpane;
	JTable table ;
	String reply;
}
 
Hallo Malte,

da Du ein eigenes TableModel nutzt, solltest Du diesem auch die beiden Vectoren übergeben:
Code:
MeineTab model = new MeineTab(tableinhalt, spaltennamen);
damit das funktioniert, musst Du natürlich einen solchen Konstruktor in Dein TableModel implementieren:
Code:
public MyTableModel(Vector<Vector> data, Vector<String> columnNames) {
		super(data, columnNames);
	}
und dann mit diesem model die Tabelle erstellen:
Code:
JTable table = new JTable(model)

MfG
 
Hallo,
danke erstmal...
es klappt so weit die Editierbarkeit ist gesperrt.
nun habe ich allerdings das Problem, dass ich sie nicht mehr mit anklicken und ok_Button auslesen kann (Zeilenweise), ich benötige jeweils das erste Feld aus meiner Tabellenzeile die ausgewählt worden ist. Welche Methode muss ich in Model implementieren, dass auch das wieder klappt, es klappte vor Einbindung des Models.. geht das überhaupt mit DefaultTableModel.
Ich poste nochmal meinen abgeänderten Quelltext bei dem ich bei actionPerformed je das erste Feld aus der ausgewählten Tabellenzeile auswählen will.

Danke und Gruß
Euer
Malte

Code:
package ch.objeng.appl.eias.awf.worklet.ext.std.ORE;

import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.*;

import java.awt.event.*;
import java.awt.BorderLayout; 

import java.util.Vector;
/**
 * @author Malte Roessner
 * @version 0.1, 26.02.2006
 * @since AWF 2.2.0
 */
public class AuswahlGui	extends JDialog 
						implements ActionListener{
	/*
	 * The Construtor sets the common Data for the
	 * folowing Dialog 
	 */
	public AuswahlGui(Response response){
		//allgemeine Daten des Dialoges festlegen
		this.setAlwaysOnTop(true);
		this.tableinhalt=response.getArray();
		this.setLayout(null);
		this.setSize(450,250);
		java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
		setLocation(((screenSize.width/2)-(this.getWidth()/2)),((screenSize.height/2))-(this.getHeight()/2));		
		this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		this.setTitle("   -- Vorschläge --   ");
		this.setResizable(false);
		this.setModal(true);		
	}
	
	/**
	 * the Actions are done here
	 */	
	public void actionPerformed(ActionEvent event) {
		if( event.getSource() == ok_Button  ){
			if (table.getSelectedRow()!= -1){
				int	index = table.getSelectedRow();
				reply = table.getValueAt(index ,0).toString(); 
			}else {
				reply = table.getValueAt(0 ,0).toString(); 
			}
			closeDialog();
		}
	}
	/**
	 * adds the Components to the Modal Dialog
	 * a JTable and a JButton are added 
	 * for providing a choose if there are more than one result possible from the Engine
	 *
	 */
	public void addComponenten(){
		// add Components
		ok_Button = new JButton("OK");
		ok_Button.setBounds(125,180,200,25);
		
		Vector tmp_vector = (Vector)(tableinhalt.elementAt(0));
		//the names of the columns of the JTable are set here
		for (int i=0; i<tmp_vector.size(); i++){
			spaltennamen.addElement(""+(i+1)+"");
		}
		
		//create JTable
		MeineTab model = new MeineTab(tableinhalt, spaltennamen);
		//table = new JTable( tableinhalt, spaltennamen );
		JTable table = new JTable(model);
		table.getTableHeader().setReorderingAllowed(false);
	    //table = new JTable(new MeineTab());
        scrollpane = new JScrollPane(table);
        scrollpane.setBounds(5,5,this.getWidth()-18,this.getHeight()/6*4);
        
        //add ActionListener to JButton 
		ok_Button.addActionListener(this);	
		
		//add Components to JDialog
		this.add(ok_Button);
		//this.add(ok_Button, BorderLayout.SOUTH);
		//this.add(scrollpane, BorderLayout.CENTER);
		this.add(scrollpane);
		this.setVisible(true);
		this.setEnabled(true);
	}
	
	/**
	 * Methode is shouted
	 * if everything is done to close the JDialog
	 *
	 */
	public void closeDialog(){
		this.setVisible(false);
		this.dispose();
	}
	
	/*
	 * Method to get the Chose of the Table for other using classes.
	 * @return String reply  chose of table row field 0,0 
	 */
	public String getReply(){
		return reply;
	}
	/**
	 * 
	 * @author Admin
	 *
	 */
	class MeineTab extends DefaultTableModel{
		//Vector columnNames = spaltennamen; 
		//Vector data = tableinhalt;
		public MeineTab(Vector data, Vector columnNames) {
			super(data, columnNames);
		}
		public boolean isCellEditable(int row, int col) {
	            //Note that the data/cell address is constant,
	            //no matter where the cell appears onscreen.
	      		 return false;
	    }		
		
	}
	
	
	//*******************
	
	/*
	 * Member Vars are set here
	 */
	Vector tableinhalt;
	Vector spaltennamen =  new Vector();
	JButton ok_Button;
	JScrollPane scrollpane;
	JTable table ;
	String reply;
}
 
Hallo nochmal,
gehe ich recht in der Annahme, dass ich
public Object getValueAt(int row , int col) und
public int getSelectedRow()
in MeineTab erst überschreiben bzw mit neuem Leben füllen muss?
wenn ja kann mir jemand mal ne Seite sagen wo ein Beispiel dazu ist?
danke schonmal und Gruß
Malte
 
Hallo,

mit getValueAt hast Du völlig recht. Hier ist mal ein kleines Beispiel, in dem eine Tabelle mit Daten gefüllt wird. Wenn Du nun eine Zelle anklickst und anschliessend den Button "auslesen" klickst, wird Dir der Inhalt der Zelle ausgegeben:

Hauptprogramm:
Code:
package de.fhhst.tutorials;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTable;

public class TableModelSample extends JFrame {

	private static final long serialVersionUID = 1L;

	public static void main(String[] args) {
		new TableModelSample();
	}

	public TableModelSample() {
		super("TableModelSample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(null);
		setSize(350, 250);
		
		JButton button = new JButton("auslesen");
		
		// Vector mit Spaltennamen anlegen
		Vector<String> colNames = new Vector<String>();
		colNames.add("Spalte 1");
		colNames.add("Spalte 2");

		// Daten-Vector erstellen (Vorsicht Sinnfreiheit - nur zu Testzwecken)
		Vector<Vector> vData = new Vector<Vector>();
		Vector<String> rowData;
		Integer value;
		for (int i = 1; i <= 10; i++) {
			rowData = new Vector<String>();
			for (int j = 0; j < 2; j++) {
				value = new Integer((i + j) * (i + j));
				rowData.add(value.toString());
			}
			vData.add(rowData);
		}

		// eigenes TableModel mit Daten-Vector und Spaltennamen instanzieren
		MyTableModel model = new MyTableModel(vData, colNames);

		// Tabelle mit eigenem TableModel erstellen
		final JTable table = new JTable(model);

		add(table).setBounds(10, 10, 250, 180);
		add(button).setBounds(10, 200, 120, 20);
		
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.out.println(table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
			}
			
		});
		
		setVisible(true);
	}

}

TableModel:
Code:
package de.fhhst.tutorials;

import java.util.Vector;

import javax.swing.table.DefaultTableModel;

public class MyTableModel extends DefaultTableModel {

	private Vector<Vector> dataVector = new Vector<Vector>();

	private static final long serialVersionUID = 1L;

	public MyTableModel(Vector<Vector> data, Vector<String> columnNames) {
		super(data, columnNames);
		setDataVector(data);
	}

	public boolean isCellEditable(int row, int col) {
		return false;
	}

	public Object getValueAt(int row, int col) {
		return getDataVector().get(row).get(col);	
	}

	public Vector<Vector> getDataVector() {
		return dataVector;
	}

	public void setDataVector(Vector<Vector> dataVector) {
		this.dataVector = dataVector;
	}
}

Da solltest Du die Antworten zu Deinen gestellten Fragen finden.

MfG
 
Hallo,
danke erstmal für die ausführliche Anwort mit dem Tablemodell.
also meine Übergabe läuft ohne Modell (1) einwandfrei allerdings mit Modell (2) schmiert er schon beim Aufbauen der Tabelle mit folgender Fehlermeldung ab...
wenn du vielleicht meinen Tippfehler oder sonstigen Tippfehler entdecken würdest wäre das phänomenal
danke erstmal und Gruß
Malte

PS: gleiche Art aufzurufen läuft bei deiner Testklasse "TableModelSample"
mit den Zeilen:
Code:
  // eigenes TableModel mit Daten-Vector und Spaltennamen instanzieren
		MyTableModel model = new MyTableModel(vData, colNames);


		// Tabelle mit eigenem TableModel erstellen
		
		final JTable table = new JTable(model);
		JScrollPane scrollpane = new JScrollPane(table);
		add(scrollpane).setBounds(10, 10, 250, 180);
		add(button).setBounds(10, 200, 120, 20);
einwandfrei. ich weiss nicht was ich bei meinem Aufruf anders mache ...

Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at ch.objeng.appl.eias.awf.worklet.ext.std.ORE.MyTableModel.getValueAt(MyTableModel.java:23)
at javax.swing.JTable.getValueAt(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at ch.objeng.appl.eias.awf.worklet.ext.std.ORE.MyTableModel.getValueAt(MyTableModel.java:23)
at javax.swing.JTable.getValueAt(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at sun.awt.RepaintArea.paintComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at ch.objeng.appl.eias.awf.worklet.ext.std.ORE.MyTableModel.getValueAt(MyTableModel.java:23)
at javax.swing.JTable.getValueAt(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Unknown Source)
at ch.objeng.appl.eias.awf.worklet.ext.std.ORE.MyTableModel.getValueAt(MyTableModel.java:23)
at javax.swing.JTable.getValueAt(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Code:
package ch.objeng.appl.eias.awf.worklet.ext.std.ORE;

import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.*;

import java.awt.event.*;

import java.util.Vector;
/**
 * @author Malte Roessner
 * @version 0.1, 26.02.2006
 * @since AWF 2.2.0
 */
public class AuswahlGui	extends JDialog 
						implements ActionListener{
	/*
	 * The Construtor sets the common Data for the
	 * folowing Dialog 
	 */
	public AuswahlGui(Response response){
		//allgemeine Daten des Dialoges festlegen
		this.setAlwaysOnTop(true);
		this.tableinhalt=response.getArray();
		
		this.setLayout(null);
		this.setSize(450,250);
		java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
		setLocation(((screenSize.width/2)-(this.getWidth()/2)),((screenSize.height/2))-(this.getHeight()/2));		
		//this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
		this.setTitle("   -- Vorschläge --   ");
		this.setResizable(false);
		this.setModal(true);	
		addComponenten();
	}
	
	/**
	 * the Actions are done here
	 */	
	public void actionPerformed(ActionEvent event) {
		if( event.getSource() == ok_Button  ){
			if (table.getSelectedRow()!= -1){
			 	int	index = table.getSelectedRow();
				reply = table.getValueAt(index ,0).toString(); 
			}else {
				reply = table.getValueAt(0 ,0).toString(); 
			}
			closeDialog();
		}
	}
	/**
	 * adds the Components to the Modal Dialog
	 * a JTable and a JButton are added 
	 * for providing a choose if there are more than one result possible from the Engine
	 *
	 */
	public void addComponenten(){
		// add Components
		ok_Button = new JButton("OK");
		ok_Button.setBounds(125,180,200,25);
		
		Vector tmp_vector = (Vector)(tableinhalt.elementAt(0));
		//the names of the columns of the JTable are set here
		for (int i=0; i<tmp_vector.size(); i++){
			spaltennamen.addElement(""+(i+1)+"");
		}
		//das funktioniert einwandfrei also ohne Modell  (1)
	
		//table = new JTable(tableinhalt, spaltennamen);
	    //scrollpane = new JScrollPane(table);
	    //scrollpane.setBounds(5,5,this.getWidth()-18,this.getHeight()/6*4);
      	
		
                //Abschmieren bei Table aufbauen (2)
		MyTableModel model = new MyTableModel(tableinhalt, spaltennamen);
		// Tabelle mit eigenem TableModel erstellen
		table = new JTable(model);
		JScrollPane scrollpane = new JScrollPane(table);
		scrollpane.setBounds(5,5,this.getWidth()-18,this.getHeight()/6*4);
		
		ok_Button.addActionListener(this);	
		//add Components to JDialog
		this.add(scrollpane);
		this.add(ok_Button);
		this.setVisible(true);
		this.setEnabled(true);
	}
	
	/**
	 * Methode is shouted
	 * if everything is done to close the JDialog
	 *
	 */
	public void closeDialog(){
		this.setVisible(false);
		this.dispose();
	}
	
	/**
	 * Method to get the Chose of the Table for other using classes.
	 * @return String reply  chose of table row field 0,0 
	 */
	public String getReply(){
		return reply;
	}
	
	/**
	 * Member Vars are set here
	 */
	Vector tableinhalt ;
	Vector spaltennamen = new Vector();
	JButton ok_Button;
	JScrollPane scrollpane;
	JTable table;
	String reply;
}
 
Zuletzt bearbeitet:
Ich denke, es wird daran liegen, wie Du den Datenvector erstellst:
Code:
this.tableinhalt=response.getArray();

Ich kenne ja Dein Response-Object nicht. Wenn ich nun also den Datenvector mit dummy-daten fülle, klappt das wunderbar...

MfG
 
Hallo nochmal,
das seltsame ist nur dass es ja klappt mit meinem MiniModel und mit dem Standard-Vector-Vector-Konstruktor von Table. Ich poste dir mal eben meine
Response Klasse vielleicht findest ja was...
response.getArray() gibt n Vector von Vectoren zurück wie es im Konstruktor von JTable gefordert ist
aber nun der Code und Danke schon mal bis hierhin
Gruß Malte

Code:
import java.util.Vector;
/**
 * @author Malte Roessner
 * @version 0.1, 
 * Class Response to hold the Response of the 
 * Rule Engine in a table-similar Datastructure
 */

public class Response {

   public Response() {
	  d_currZeile=new Vector();
	  d_array=new Vector();
   }
   
   /**
    * Adds an element to one row.
	 * 
	 * @param element Object Element to be put into a table row
	 * 
    */
   public void addElementToZeile(Object element) {
	   d_currZeile.add(element);
   }
   
   /**
    * Adds a full row to the Table
	* 
    */
   public void copyZeileToArray() {
	   d_array.add(d_currZeile);
	   d_currZeile=new Vector();
   }
   
   /**
    * Method returns the Data of one Row of the Table
    * @return Vector d_array Tablerow
    */
   public Vector getArray() {
	   return d_array;
   }
   
   //Member Vars
   /**
	 * Vector defining current row of table
	 */
   private Vector d_currZeile;
   /**
	 * Vector defining the table itself
	 */
   private Vector d_array;

}
 
Zurück