JRadioButton - problem z odświeżaniem

0

mam taką funkcję którą wywołuję w ActionListener przycisku:

private void wykonajZapytanie()
	{
		rs = null;
		String query = null;
		try
		{
			if(wyniki.equals("wynikiGodzinne"))
			{
				if(cmbGodzinaOd.getSelectedIndex() <= cmbGodzinaDo.getSelectedIndex())
				{
					query = "select trader_id, order_nbr, sum(net_pl)::numeric(8,2) as \"SUMA\", event_date from baza";
                                         //zwraca 4 kolumny
				}
				else
					JOptionPane.showMessageDialog(Ramka.this, "Błąd", "błąd", 0);
			}
			else if(wyniki.equals("wynikiSymbol"))
			{
				query = "select * from wyniki_symbol"; //zwraca 6 kolumn
			}
			rs = stat.executeQuery(query);
			crs = new CachedRowSetImpl();
			crs.populate(rs);

			tblmWyniki.wyczyscDane();
			tblmWyniki.wstawDane(crs);

			String sort = sortowanieWynikow(tblmWyniki);
			System.out.println(sort);

			rs.close();
		}
		
		catch(SQLException ex)
		{
			ex.printStackTrace();
			//JOptionPane.showMessageDialog(null, ex.toString(), "BŁĄD", 0);
		}
	}

oraz funkcję sortowanieWynikow wywoływaną powyżej w funkcji, która zwraca String i tworzy ButtonGroup z JRadioButton'ami

String sortWg = null;
	
	private String sortowanieWynikow(WynikiTableModel model)
	{
		rbSortowanie = new JRadioButton[model.getColumnCount()];
		for(int i = 0 ; i < model.getColumnCount() ; i++) {
		
			rbSortowanie[i] = new JRadioButton(model.getColumnName(i));
			bgSortowanie.add(rbSortowanie[i]);
			pnlSortowanie.add(rbSortowanie[i]);
			
			ActionListener listener = new ActionListener() {
			
				@Override
				public void actionPerformed(ActionEvent e) {
					//JRadioButton tmp = (JRadioButton)e.getSource();
					sortWg = e.getActionCommand();
					//System.out.println("order by " + sortWg);
				}
			};
			rbSortowanie[i].addActionListener(listener);
		}
                             //próbowałem tak
		//pnlSortowanie.validate();
		//pnlSortowanie.repaint();
		
		return sortWg;
	}

jak zrobić aby za każdym naciśnięciem przycisku ButtonGroup był na nowo rysowany, bo teraz za każdym razem dodaje mi kolejne JRadioButton'y, oraz czy istnieje jakaś funkcja ActionEvent zwracająca 'int' wybranego JRadioButton'a, teraz zwraca mi String a ja muszę zrobić aby zwracała int?

0

rbSortowanie musisz wyczyścić metodą remove() przed wrzuceniem do nich następnych buttonów.
A stringa przecież możesz zamienić na int (no chyba że w tym stringu jest coś więcej niż liczby) Integer.valueOf.

0

da się to zrobić w jednej funkcji, dodanie i usunięcie JRadioButton'ów? masz może jakiś przykładowy kod?
na int nie mogę zamienić bo wartości zwracane to Stringi (nazwy kolumn), a mnie chodzi o to czy da się wyciągnąć numery tych Stringów?

0

w pętli for maksymalny zakres masz określony przez model.getCount...(). W tej pętli tworzysz liczbę tych radiobuttonów (jak się nie mylę).
Zgaduję że musisz coś zmienić w klasie wynikiTableModel...

Pozdr

0

wartość zwracana przez:

model.getColumnCount()

klasy WynikTableModel jest za każdym razem prawidłowa

0

prześlij cały kod to uruchomię u siebie...Uprość jak tylko potrafisz :)

0

mój program korzysta z bazy PostgreSQL, będziesz miał jak przetestować?

0

już rozwiązałem ten problem, należało usunąć wszystkie elementy z panelu przed pętlą

pnlSortowanie.removeAll();

i na koniec odmalować panel

czym się różni revalidate() i repaint(), bo zarówno dla jednej i drugiej panel jest odmalowany, czy może obu użyć?

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