przekazywanie danych do Jcombobox z Mysql

0

Witam,

Patrzyłem po forum ale nie mogłem znaleźć.

Mam taki problem. Zrobiłem connector w formie Singletona do bazy danych. I teraz tak mam dwie klasy : MainForm i DBConnection. W pierwszej jest uruchamiana aplikacja i tworzony formularz który zawiera mi JCombobox.

W klasie DBConnection mam pod Singletonem coś takiego:

 	  public void SelectFromSamochody() throws SQLException {
		
	        String sql = "SELECT marka, model FROM samochody";
	        statement = db.conn.prepareStatement(sql);
	        rs = statement.executeQuery(sql);
	        
	        while(rs.next()){
	        	String marka = rs.getString("marka");
	        	
	        	cmbauto.addItem(marka);
	        }
	
	  }}

cmbauto to nazwa Jcomboboxa z MainForm. Jak mogę przekazać to co pobieram z bazy do tego Combobox-a?

Bo chyba nie bardzo wiem jak to zrobić.

0

Możesz skorzystać z modelu dla ComboBoxa:
http://www.java2s.com/Tutorial/Java/0240__Swing/JComboBoxUsingtheCustomModel.htm

Ja w swoim projekcie zrobiłem to tak:
https://github.com/DanielMichalski/contacts-group

0

Zrobiłem to trochę inaczej. Robię to na MVC i teraz w Artopcje.java(plik zawiera mi opcję):

 
	public List<Artykul> getArtykul() throws SQLException {
		
		List<Artykul> news = new ArrayList<Artykul>();
		
		Connection conn = Database.getInstance().getConnection();
		
		String sql = "select id, title, article from news order by id";
		Statement p = conn.createStatement();
		
		ResultSet results = p.executeQuery(sql);
		
		while(results.next()) {										// pętla wyciągająca kolejne elementy z tabeli 
			int id = results.getInt("id");
			String title = results.getString("title");
			String article = results.getString("article");
			
			Artykul artykul = new Artykul(id, title, article);				// tworzenie nowego wiersza
			
			news.add(artykul);
		}
		results.close();
		p.close();
		
		return news;
	}

a w View chcę wywołać to co wychodzi do Jcombo. W sumie wystarczyło by mi żeby pobierał sam tytuł a po jego wybraniu chcę otwierać nowe okno z treścią:

private JComboBox<ArtOpcje> combo = new  new JComboBox<ArtOpcje>();
private ArtOpcje l = new ArtOpcje();
		
combo.setBounds(130, 250, 300, 30);
combo.addItem(l);
this.add(combo);

Pewnie coś popierniczyłem lub coś źle rozumiem. z góry dziękuję

0
for (Artykul el : articles) {
        combobox.addItem(el.getTitle());
}
0

a w którym miejscu to mam dać?

0

To tylko "szkielet" co należy zrobić. Nie wiem czy CB ma dynamicznie zmieniać model czy tylko raz. Jeżeli raz to pobierz z bazy listę Artykułów i zaraz po utworzeniu CB dodaj itemy. Jeżeli dynamicznie to musisz napisać prostą metodę, która będzie usuwała wszystkie elementy(removeAllItem), a następnie nową listę załadować do modelu

0

To jeszcze jedno pytanie. Tak jak mam na chwilę obecną wyświetlam mi się w combo coś takiego :

model.ArtOpcje@3a32429d

model u mnie to package w którym znajduję się plik artOpcje. A powinien się chyba wyświetlać pierwszy wiersz z tabeli.

0

Bo w modelu masz obiekt. Zwykle w modelu CB trzyma się Stringi lub enumy.

  1. Albo wyciągniesz z obiektu to co Cię interesuje, np tak jak podałem Ci wyżej.(DB -> List<Artykul> -> pojedynczy Artykul -> tytuł Artykul)
  2. Albo nadpisz metodę toString w klasie ArtOpcje.
0

Dobrze myślę?

	

public JComboBox<String> Combofill() {
		
		JComboBox<String> combo = new JComboBox<String>();
		
		ArrayList<Artykul> article = getArtykul();
		
		for(Artykul el : article){
			combo.addItem(el.getTitle());
		}
		
		return combo;
	}
0

Zrobiłem debug. I pobierany jest tylko model. To co wyżej pisałem. Czyli model.ArtOpcje. jak patrzę głębiej w news to news jest pusty.

W Modelu mam napisane tak:

 
public class Model {

	private Set<Artykul> news = new HashSet<Artykul>();
	
	public ArrayList<Artykul> getArtykul(){
		
		return new ArrayList<Artykul>(news);
	}
	
	public JComboBox<String> Combofill() {
		
		
		JComboBox<String> combo = new JComboBox<String>();
		
		ArrayList<Artykul> article = getArtykul();
		
		for(Artykul el : article){
			combo.addItem(el.getTitle());
		}
		
		return combo;
	}
	
}
0

A gdzie masz dane z DB? W tym momencie Twój model jest pusty. Przecież w trzecim poście masz metodę do pobierania danych z DB to po co piszesz nową?

0

Tam to jest w pliku Database.

I teraz tak niby wszystko jest ok. Ale nic mi się nie ładuje do Jcombobox wyświetla mi się po uruchomieniu
aplikacji w JCombo tyle : []

0

Patrz post wyżej. Czytaj aż do skutku :)
Musisz z Database pobrać listę artykułów a nie ładować pustą listę poprzez mockową metodę getArticles. Przekaż odpowiednie referencje do Twojego kontrolera(wspomniałeś, że korzystasz z MVC) i zrób update modelu i widoku

0

Dobra udało mi się to napisać tylko że wywala mi się przy Select z bazy danych. Jak zrobiłem brakepoint przy statement to conn ma wartość null.

0

Widzę u Ciebie w kodzie throws SQLException. Obsługujesz gdzieś te wyjątki? W obsłudze powinieneś wyświetlić (zalogować) informację co poszło źle.

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