JTable

Stefan1987

Grünschnabel
Hallo zusammen,

ich bin im Umgang mit JTables neu und wollte mich erkundigen, ob es möglich ist, speziellen Zellen einer JTable so etwas wie FocusLost Listener hinzuzufügen. Ich kenne nur das tableChanged vom TableModelListener.

Ich habe mir das so vorgestellt, dass beim Editieren einer bestimmten Zelle eine andere Zelle entsprechend miteditiert wird.

Danke für eure Hilfe.

Stefan1987
 
Moin,

das kommt sicher darauf an, wie Du es meinst ;-]

Sicher kannst Du jeden Wert, der in einer beliebigen Zelle eingegeben wird, nach danach in eine andere schreiben!

Soll das beliebig passieren oder immer fix (bspw. edit in a5, schreiben zwei Zellen weiter rechts) :confused:

Du solltest vlt. mal genauer (am Besten mit Code) erläutern, was genau wo passieren soll!

Gruß
Klaus
 
Hallo Klaus,

es soll folgendes möglich sein:
In der Tabelle gibt es eine Spalte "Von" und eine Spalte "Bis", ist "Bis" gesetzt, soll die Differenz automatisch berechnet und in die entsprechende Spalte eingetragen werden. Der Ablauf soll dabei wie folgt von statten gehen:

Code:
lTable=createTable(....);
addCellListener(lTable, 0, 0, Funktion); //

addCellListener sieht folgendermaßen aus:

Code:
static public void addCellListener(String pTableHandle, int pRow, int pColumn, String pFunction) throws Exception{
    	//Exceptionhandling
        	JTable lTable=(JTable)sContainer.getMMap().get(pTableHandle).getMObject();
        	lTable.getColumnModel().getColumn(pColumn).setCellEditor(new GenericCellEditor(pFunction));
        }
    }

Der dazugehörige GenericCellEditor:

Code:
public class GenericCellEditor extends AbstractCellEditor implements TableCellEditor{

	private static final long serialVersionUID = 1L;
	private JTextField mField=new JTextField();
	
	public A4LGenericCellEditor(String pFunction){
		mField.addFocusListener(new FocusListener(){

			@Override
			public void focusGained(FocusEvent arg0) {
				
			}

			@Override
			public void focusLost(FocusEvent arg0) {
				System.out.println("bla");
			}
			
		});
	}
	
	@Override
	public Component getTableCellEditorComponent(JTable arg0, Object value,
			boolean arg2, int arg3, int arg4) {
		mField.setText((String) value);
		 
        return mField;

	}

	@Override
	public Object getCellEditorValue() {
		return ((JTextField) mField).getText();

	}

}

Dabei möchte ich aber gern auf die Textfelder verzichten. Also meine Frage: Wie lässt sich auf einzelne Zellen speziell ein CellListener legen, ohne wie in dieser Lösung Textfelder zu integrieren?

Gruß
Stefan1987
 

Neue Beiträge

Zurück