JavaFX - Collection - ListChangeListener - vnitřní třída – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

JavaFX - Collection - ListChangeListener - vnitřní třída – Java – Fórum – Programujte.comJavaFX - Collection - ListChangeListener - vnitřní třída – Java – Fórum – Programujte.com

 

NotBeginner
~ Anonymní uživatel
185 příspěvků
8. 12. 2013   #1
-
0
-

Ahojte, tak si zkouším vyrobit na kolekci( ArrayList ) listener(ListChangeListener) z JavaFX 2 ( vcelku užitečná funkce) pro vnitřní třídu. Přes anonymní třídu mi to funguje ale ta vnitřní mi dělá problémy. Zde je easy zdroják  Napadá vás někoho jak ten problém obejít? Na zahraničních fórech to ještě nikdo neřešil a exampl na to není.

import java.util.*;
import javafx.beans.*;
import javafx.collections.*;
public class X01_KolekceObservableList {
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public static void main(String [] args){
		List<String> seznam = new ArrayList<String>();							//	vytvorime kolekci
		ObservableList<String> obsList = FXCollections.observableList(seznam);	//	vytvorime objekt abtraktni kolekce a spojime jej s hlavni kolekci
		seznam.add(new String("Info 1"));														//	pridame 1 prvek do seznamu
		seznam.add(new String("Info 2"));														//	pridame 2 prvek do seznamu
		seznam.add(new String("Info 3"));														//	pridame 3 prvek do seznamu
		System.out.println("TEST ------------- START");
		obsList.addListener(new UdalostObsKolekce());							//	vnitrni trida - PROBLEM
        	obsList.addListener(new ListChangeListener() {							//	anonymni trida 
			public void onChanged(Change change) {
                		System.out.println("Detekuji Zmenu 1 ");	}	});
        	System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
        	System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
        	System.out.println("TEST ------------- 1 ..... pridame prvek do seznamu");
        	seznam.add(new String("Info 4"));														//	pridame 4 prvek do seznamu
        	VypisKolekceSeznam(seznam);
        	System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
        	System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
        	System.out.println("TEST ------------- 2 ..... pridame prvek do observer seznamu");
        	obsList.add(new String("Info 5"));														//	pridame 5 prvek do seznamu
        	VypisKolekceObsSeznam(obsList);
        	System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
        	System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
        	System.out.println("TEST ------------- 3 ..... odebereme prvek ze seznamu");
        	seznam.remove(new String("Info 3"));
        	VypisKolekceObsSeznam(obsList);
        	System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
        	System.out.println("Velikost kolekce 'obsList' : "+obsList.size());
        	System.out.println("TEST ------------- 4");
        	System.out.println("TEST ------------- EXIT");	}
	private static void VypisKolekceSeznam(List<String> kolekce){
		int i=1;
		for(Iterator<String> iter = kolekce.iterator(); iter.hasNext();){
			System.out.println("Prvek "+(i++)+"\t"+iter.next());	}	}
	private static void VypisKolekceObsSeznam(ObservableList<String> obsList){
		int i=1;
		for(Iterator<String> iter = obsList.iterator(); iter.hasNext();){
			System.out.println("Prvek "+(i++)+"\t"+iter.next());	}	}
	//		NELZE VYTVORIT UDALOST JAKO VNITRNI TRIDA
	class UdalostObsKolekce implements ListChangeListener<ObservableList<String>> {
		public void onChanged( javafx.collections.ListChangeListener.Change<? extends ObservableList<String>> c) {
			System.out.println("Detekuji Zmenu 2 ");	}
	}
	class UdalostObsKol implements ListChangeListener<String> {
		public void onChanged( javafx.collections.ListChangeListener.Change<? extends String> c) {
			System.out.println("Detekuji Zmenu 3 ");	}
	}
}
Nahlásit jako SPAM
IP: 217.112.161.–
z
~ Anonymní uživatel
268 příspěvků
8. 12. 2013   #2
-
0
-

K vnitřním třídám, podobně jako jiným "součástem" tříd, musíš přistupovat pres instanci vnější třídy, nebo je deklarovat jako statické a přistupovat k nim staticky.

Nejjednodušší bude v mainu hned vytvořit instanci a "vlézt" do ní:

public static void main(String [] args) {
    new X01_KolekceObservableList().xmain(args);
}

public void xmain(String [] args)
// zbytek bez zmeny, tak jak to mas ted
// jsme v instanci, new TridaXY() tedy bude jako this.new TridaXY()

A UdalostObsKolekce ti tam dát nepůjde, protože neimplementuje požadovaný listener. UdalostObsKol je OK.

Nahlásit jako SPAM
IP: 88.101.8.–
NotBeginner
~ Anonymní uživatel
185 příspěvků
9. 12. 2013   #3
-
0
-

Díky funguje to. Pro budoucí generace, zde jsou daná řešení      

import java.util.*;
import javafx.collections.*;
public class X01_KolekceObservableList {
	@SuppressWarnings({ "unchecked", "rawtypes" })
	X01_KolekceObservableList()	{		//	KONSTRUKTOR
		List<String> seznam = new ArrayList<String>();							//	vytvorime kolekci
		ObservableList<String> obsList = FXCollections.observableList(seznam);	//	vytvorime objekt abtraktni kolekce a spojime jej s hlavni kolekci
		seznam.add(new String("Info 1"));														//	pridame 1 prvek do seznamu
		seznam.add(new String("Info 2"));														//	pridame 2 prvek do seznamu
		seznam.add(new String("Info 3"));														//	pridame 3 prvek do seznamu
		System.out.println("TEST ------------- START");
		obsList.addListener(new UdalostObsKol());								//	vnitrni trida - NUTNY STATICKY PRISTUP V TRIDE
		pridameListenerObjekt(obsList);											//	vnitrni trida - OBJEKTOVA VARIANTA - nutne pres objekt z mainu
        	obsList.addListener(new ListChangeListener() {							//	anonymni trida 
			public void onChanged(Change change) {
                	System.out.println("Detekuji Zmenu 1 ");	}	});
        	kontrolniVypisVelikostiKolekce(seznam,obsList);
        	System.out.println("TEST ------------- 1 ..... pridame prvek do seznamu");
        	seznam.add(new String("Info 4"));														//	pridame 4 prvek do seznamu - listener nefunkcni
        	VypisKolekceSeznam(seznam);
        	kontrolniVypisVelikostiKolekce(seznam,obsList);
        	System.out.println("TEST ------------- 2 ..... pridame prvek do observer seznamu");
        	obsList.add(new String("Info 5"));														//	pridame 5 prvek do seznamu pres objekt impl. rozhrani
        	VypisKolekceObsSeznam(obsList);
        	kontrolniVypisVelikostiKolekce(seznam,obsList);
        	System.out.println("TEST ------------- 3 ..... odebereme prvek ze seznamu");
        	seznam.remove(new String("Info 3"));													//	odebereme prvek ze seznamu	- listener nefunkcni			
        	VypisKolekceSeznam(seznam);
        	kontrolniVypisVelikostiKolekce(seznam,obsList);
        	System.out.println("TEST ------------- 4 ..... odebereme prvek ze observer seznamu");
        	obsList.remove(new String("Info 5"));													//	odebereme prvek ze seznamu pres objekt impl. rozhrani
        	VypisKolekceObsSeznam(obsList);
        	kontrolniVypisVelikostiKolekce(seznam,obsList);
        	System.out.println("TEST ------------- EXIT");		}
	private static void kontrolniVypisVelikostiKolekce(List<String> seznam,ObservableList<String> obsList){
		System.out.println("Velikost kolekce 'seznam' : "+seznam.size());
        	System.out.println("Velikost kolekce 'obsList' : "+obsList.size());	}
	private void pridameListenerObjekt(ObservableList<String> obsList){
		obsList.addListener(new UdalostObsKolekce());	}
	private static void VypisKolekceSeznam(List<String> kolekce){
		int i=1;
		for(Iterator<String> iter = kolekce.iterator(); iter.hasNext();){
			System.out.println("Prvek "+(i++)+"\t"+iter.next());	}	}
	private static void VypisKolekceObsSeznam(ObservableList<String> obsList){
		int i=1;
		for(Iterator<String> iter = obsList.iterator(); iter.hasNext();){
			System.out.println("Prvek "+(i++)+"\t"+iter.next());	}	}
	public static void main(String [] args){
		new X01_KolekceObservableList();	}
	//	EVENT PRES PRES OBJEKT
	private class UdalostObsKolekce implements ListChangeListener<String> {
		public void onChanged( ListChangeListener.Change<? extends String> c) {
			System.out.println("Detekuji Zmenu 2 ");	}
	}
	//	EVENT PRES STATICKOU TRIDU
	private static class UdalostObsKol implements ListChangeListener<String> {
		public void onChanged( javafx.collections.ListChangeListener.Change<? extends String> c) {
			System.out.println("Detekuji Zmenu 3 a test metod listeneru ?\t"+c.wasUpdated());	}
	}
}
Nahlásit jako SPAM
IP: 217.112.161.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 32 hostů

Podobná vlákna

Vnitrni trida a jeji instance — založil Sranda

Vnitřní třídy — založil Marek

PHP ping ve vnitrni siti — založil Marek Stejskal

C# Pohyb v collection — založil Attila

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý