JButton w JTable wyciąganie wartości

0

Witam!

Moim problem było umieszczenie JButton w komorce JTable. Udało sie to za pomocą strony

http://tips4java.wordpress.com/2009/07/12/table-button-column/

Jednak teraz mam następujący problem. Tabelkę tworzę w następujący sposób:

cells = new Object[emp.GetRowsCount()][8];
			
		      final JTable table = new JTable(cells, columnNames);
		      table.setAutoCreateRowSorter(true);
		      tableScroll = new JScrollPane(table);
		      
			for(int i = 0; i < emp.GetRowsCount(); i++) {
				cells[i][0] = empTab[i].GetUserName();
				cells[i][1] = empTab[i].GetUserSurname();
				cells[i][2] = empTab[i].GetUserLogin();
				cells[i][3] = empTab[i].GetUserDateOfBirth();
				cells[i][4] = empTab[i].GetUserDateOfEmployment();
				cells[i][5] = empTab[i].GetUserPossition();
				cells[i][6] = empTab[i].GetUserContactNumber();
				cells[i][7] = null;
				
				Action testAction = new testAction(empTab[i].GetUserLogin());
				ButtonColumn test = new ButtonColumn(table, testAction, 7);			
				test.setMnemonic(KeyEvent.VK_D);
			}

Moim celem jest osiągniecie takiego stanu, kiedy przy wciśnieciuą buttona przy odpowiedniej kolumnie, wyświetli się zawartość jednego z wiersza, np empTab[i].GetUserLogin(); Nie działa to do końca, ponieważ wciśnięcie jakiegokolwiek przycisku zawsze zwraca ostatnią wartość z pętli. Tak więc wciskajac przycisk z 1 wiersza i tak dostaniemy wartosc z ostatniego. Jak to zmienić zeby działało tak jak chce?

0

Możesz zapamiętać w przycisku numer wiersza:

button.setActionCommand(""+i);

a w obsłudze zdarzenia odczytać ten numer:

public void actionPerformed(ActionEvent ae)
{
     int index = Integer.parseInt(ae.getActionCommand());
     ...
}
0

Działa prawie idealnie. Zrobiłem tak:

Action testAction = new testAction(empTab[i].GetUserLogin());
				int tmp = empTab[i].GetUserId();
				System.out.println(tmp);
				ButtonColumn test = new ButtonColumn(table, testAction, 7, tmp);			
				test.setMnemonic(KeyEvent.VK_D);

w kodzie ButtomColumn:

public ButtonColumn(JTable table, Action action, int column, int id)
[..]
renderButton.setActionCommand("" + id);

w testAction:

		int index = Integer.parseInt(e.getActionCommand());
		System.out.println(index);

Jednak zapamiętuje mi numer wiersza, a nie wprowadzona przeze mnie wartosc, czyli int tmp = empTab[i].GetUserId();. Czy to po prostu w ten sposob nie zadziala i zawsze zwroci numer wiersza? Jezeli to tak jak zrobic, zeby zwracalo mi to oczekiwana przeze mnie wartosc?

0

A czemu nie tak?

ButtonColumn test = new ButtonColumn(table, testAction, 7, i); 
0

No, dobrze, w ten sposob rowniez bede mial numer wiersza, ale nie przydaje mi sie on do niczego. Ale w jaki sposób dostanę wartosci ktore w tym wierszu sie znajdujda? przykaldowo po kliknieciu na przycisk pojawi mi sie "index = 5", jednak ja potrzebuje uzyskac w ten sposob dostep do kilku wartosci z tej lini, object[5][2] przykladowo

0

object[index][2]?

1 użytkowników online, w tym zalogowanych: 0, gości: 1