Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • Anonim

    Witam,

    Pisze wlasnie swoj pierwszy projekt z Javy i nie mam jeszcze duzej wprawy...Robie GUI do programu i mam maly problem. Mam anonimowa klase wewnetrzna i we wnetrzu tej klasy potrzebuje dostepu do m.in. do indexu petli w ktorej powoluje do zycia kolejne obiekty tej klasy. Czy jest jakas mozliwosc wywolania inicjalizacji instancji takiej klasy z parametrami? Problem rozwiazalem deklarujac zmienna automatyczna rowna indexowi petli i zrobilem ja finalna, dzieki temu z wnetrza klasy wewnetrtznej mam do niej dostep...ale wydaje mi sie to nieeleganckim rozwiazaniem i chcialem sie zapytac czy moze ktos zna jakas ladniejsza metode?
    Z gory dzx.
    Pozdr
  • Maciek Makowski

    > Mam anonimowa klase wewnetrzna i we wnetrzu
    > tej klasy potrzebuje dostepu do m.in. do indexu
    > petli w ktorej powoluje do zycia kolejne obiekty tej
    > klasy. Czy jest jakas mozliwosc wywolania
    > inicjalizacji instancji takiej klasy z parametrami?

    Jest taka mozliwosc, pod warunkiem, ze klasa bazowa po ktorej dziedziczy anonimowa klasa posiada odpowiedni konstruktor -- mozna wtedy wywolac

    new KlasaBazowa(i) {
    ...
    }

    domyslam sie jednak, ze KlasaBazowa jest jakas klasa biblioteczna i nie posiada konstruktora KlasaBazowa(int), ktory zachowywalby sie tak, jak chcesz. W takim wypadku najlepiej chyba nadac nazwe klasie wewnetrznej -- bedziesz wtedy mogl zdefiniowac odpowiedni konstruktor.
  • Anonim

    Dzieki za pomoc. Zostane chyba jednak przy tej anonimowej klasiei i zostawie te zmienne finalne, bo musialbym jakies 300 linijek kodu zmieniac...ta klasa oblsuguje mi klikniecia myszka, przesuwanie muszka itd...i nie bede tego zmienial bo poki co ladnie dziala.. Ale dzieki za pomysl

    Pozdrawiam
  • YouCan'tGoWrongWithStretchyPants

    Nie wiem czy dokładnie o to ci chodzi, ale w GUI robię zazwyczaj tak:

    public class TestPanel extends Composite {

    [...]

    iFeelADifferenceButton.addSele ctionListener(new SelectionListener() {
    public void widgetSelected(SelectionEvent e) {
    TestPanel.this.iFeelADifferenc e(e);
    }
    public void widgetDefaultSelected(Selectio nEvent e) {
    TestPanel.this.iFeelADifferenc e(e);
    }
    });

    [...]

    public void iFeelADifference(SelectionEven t e) {
    colorTest.iFeelADifference();
    referenceColorBox.setColor(col orTest.getCurrentColor());
    comparisonColorBox.setColor(co lorTest.getNextColor());
    colorChart.redraw();
    }

    }

    I z metody iFeelADifference mogę się odwoływać do dowolnych pól klasy TestPanel. Nie jest to Swing tylko SWT ale zasada ta sama; )
  • Maciek Makowski

    > [...]
    > I z metody iFeelADifference mogę się odwoływać
    > do dowolnych pól klasy TestPanel.

    Do dowolnych pol klasy TestPanel mozesz tez odwolywac sie bezposrenio z anonimowej klasy tworzonej w addSelectionListener(). Problem byl z odwolaniem do niefinalnej zmiennej lokalnej.