Witam

Czy ktoś byłby tak uprzejmy i pomógł/wskazał drogę aby móc obsłużyć dynamicznie tworzony formularz z k-kolumnami i i-wierszami?
Chodzi mi o obsługę zdarzeń dotyczących komórek przed i po, oraz w jednym wierszu jak i w jednej linii, oraz o zapisywanie i wczytywanie danych do nich.

Dla przykładu mam:

for (int i = 1; i <= array.size(); i++) {
				JSONObject obj_i = (JSONObject) array.get(i);
				int idd = Integer.valueOf(obj_i.get("id").toString());
				int weight = Integer.valueOf(obj_i.get("weight").toString());
				
				if (Boolean.valueOf(obj_i.get("checkbox").toString())) {
					final JCheckBox chkbx_suffix_idd_i;
						
					switch (weight) {
					case 0:
						chkbx_suffix_idd_i =  new JCheckBox(obj_i.get("desc").toString());
						chkbx_suffix_idd_i.setFont(new Font("Dialog", Font.BOLD, 13));
						break;
					case 1:
						chkbx_suffix_idd_i =  new JCheckBox("  " + obj_i.get("desc").toString());
						chkbx_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					case 2:
						chkbx_suffix_idd_i =  new JCheckBox("    " + obj_i.get("desc").toString());
						chkbx_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					/*case 3:
						chkbx_suffix_idd_i =  new JCheckBox("  " + obj_i.get("desc").toString());
						chkbx_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;*/
					default:
						chkbx_suffix_idd_i =  new JCheckBox(obj_i.get("desc").toString());
						chkbx_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					}
					
					chkbx_suffix_idd_i.setToolTipText("Kliknięcie spowoduje rozwinięcie pola o pozycje bardziej szczegółowe.");
					GridBagConstraints gbc_chkbx_suffix_idd_i = new GridBagConstraints();
					gbc_chkbx_suffix_idd_i.anchor = GridBagConstraints.WEST;
					gbc_chkbx_suffix_idd_i.insets = new Insets(0, 0, 5, 5);
					gbc_chkbx_suffix_idd_i.gridx = 0;
					gbc_chkbx_suffix_idd_i.gridy = i;
					chkbx_suffix_idd_i.addItemListener(new ItemListener() {
						public void itemStateChanged(ItemEvent arg0) {
							if (chkbx_suffix_idd_i.getSelectedObjects() != null) {
								chkbx_suffix_idd_i.setVisible(true);
							} else {
								chkbx_suffix_idd_i.setVisible(false);
							}
						}
					});
					panel.add(chkbx_suffix_idd_i, gbc_chkbx_suffix_idd_i);
				} else {
					final JLabel lbl_suffix_idd_i;
					
					switch (weight) {
					case 0:
						lbl_suffix_idd_i = new JLabel(obj_i.get("desc").toString());
						lbl_suffix_idd_i.setFont(new Font("Dialog", Font.BOLD, 13));
						break;
					case 1:
						lbl_suffix_idd_i = new JLabel("       " + obj_i.get("desc").toString());
						lbl_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					case 2:
						lbl_suffix_idd_i = new JLabel("          " + obj_i.get("desc").toString());
						lbl_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					case 3:
						lbl_suffix_idd_i = new JLabel("             " + obj_i.get("desc").toString());
						lbl_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					default:
						lbl_suffix_idd_i = new JLabel(obj_i.get("desc").toString());
						lbl_suffix_idd_i.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					}
						
					GridBagConstraints gbc_lbl_suffix_idd_i = new GridBagConstraints();
					gbc_lbl_suffix_idd_i.insets = new Insets(0, 0, 5, 5);
					gbc_lbl_suffix_idd_i.anchor = GridBagConstraints.WEST;
					gbc_lbl_suffix_idd_i.gridx = 0;
					gbc_lbl_suffix_idd_i.gridy = i;
					panel.add(lbl_suffix_idd_i, gbc_lbl_suffix_idd_i);
				}
					
				for (int k = 0; k <= period; k++) {	
					int a = k + 1;
					final JTextField textField_suffix_idd_k = new JTextField();
					
					switch (weight) {
					case 0:
						textField_suffix_idd_k.setFont(new Font("Dialog", Font.BOLD, 12));
						break;
					case 1:
						textField_suffix_idd_k.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					default:
						textField_suffix_idd_k.setFont(new Font("Dialog", Font.PLAIN, 12));
						break;
					}

					textField_suffix_idd_k.setBackground(Color.WHITE);
					textField_suffix_idd_k.setColumns(5);
					GridBagConstraints gbc_textField_suffix_idd_k= new GridBagConstraints();
					gbc_textField_suffix_idd_k.fill = GridBagConstraints.HORIZONTAL;
					gbc_textField_suffix_idd_k.insets = new Insets(0, 0, 5, 5);
					gbc_textField_suffix_idd_k.gridx = a;
					gbc_textField_suffix_idd_k.gridy = i;
					panel.add(textField_suffix_idd_k, gbc_textField_suffix_idd_k);
				}

Mam wygenerowane:

coś tam 1 pole11 pole12 pole13
coś tam 2 pole21 pole22 pole23
coś tam 3 pole31 pole32 pole33

i teraz potrzebuję odczytać wartości z każdego "poleXX" oraz je później wgrać do tych pól.
Potrzebuję też napisać obsługę zdarzeń że jak zaznaczę checkbox na "coś tam 2" to cała linia z "poleXX" jest widoczna, a jak odznaczę to się to ukrywa.
Również potrzebuje opisać zdarzenia z powiązując poleXX w kolumnach tzn że pole12 jest sumą pól pole12 i pole13.

Któś mógłby pomóc?