Portál AbcLinuxu, 10. května 2025 00:29

Dotaz: Java začátečník - práce s třídami v externích souborech

13.7.2009 18:13 Majlo
Java začátečník - práce s třídami v externích souborech
Přečteno: 518×
Odpovědět | Admin

Čau

Programuju Java Applet (pomocí JApplet) a nelíbí se mi implicitní ColorChooser tak sem si naprogramoval svůj. Nedělám s Javou moc dlouho.. no třídu svého ColorChooseru (MyColorChooser) jsem dal do speciálního souboru a protože v něm mám programovaných víc svýcho komponent tak sem to zabalil do třídy MyColors:

<code>

MyColors.java:

public class MyColors{
      public class MyColorChooser extends javax.swing.JPanel{
            private SpectrumSlider Slider;
            ...
            public MyColorChooser(){
                  ...
            }
            ...
      }
      public class SpectrumSlider extends javax.swing.JLabel {
            float hue, saturation, brightness;
            int WIDTH, HEIGHT, SIDE, VERTICALBORDER;

            SpectrumSlider(){this(15, 180);}
            SpectrumSlider(int a, int b){
                  super();
                  ...
            }
            ...
      }
      ...
}
</code>

Mno... a v souboru s hlavní třídou - MyJApplet.java mám kód

<code>

private MyColors.MyColorChooser ColorChooser

</code>

To funguje bez problémů..
Tohle však háže chybu
<code>
ColorChooser = new MyColors.MyColorChooser();
</code>
C:\...\NetBeansProjects\MyJApplet\src\MyJApplet.java:110: an enclosing
instance that contains MyColors.MyColorChooser is required
Nevím co s tím, zdalipak se najde laskavá duše co poradí?

Dííík..
			
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.7.2009 19:53 moira | skóre: 30 | blog: nesmysly
Rozbalit Rozbalit vše Re: Java začátečník - práce s třídami v externích souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin
jukni sem
Překladač ti nikdy neřekne: "budeme kamarádi"
14.7.2009 14:29 msaft | skóre: 7
Rozbalit Rozbalit vše Re: Java začátečník - práce s třídami v externích souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ne ze bych nekdy nejaky aplet napsal ... , ale sdruzovani trid se v jave resi pres baliky (ostatne nepouzivas defaultni balik, ze:). Plati co verejna trida, to soubor.

Vnorene tridy viz odpoved vyse. (Nemas k nim primy pristup, potreboval bys (statickou?) instanci vnejsi tridy, ktera by ti poskytla instanci tridy vnitrni -- to je to, co ti ta hlaska rika.)

Takze pokud to fakt nepotrebujes (neznam konkretne aplety), tak to dej do zvlastnich souboru v jednom baliku (cz.moje.utils whatever).

14.7.2009 15:31 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Java začátečník - práce s třídami v externích souborech
S poslední větou, pokud jde o začátečníky, souhlasím, ale zbytek není tak úplně pravda. Zkusím vysvětlit.

Vnořené třídy se z vnějšku chovají podobně jako ostatní "věci" ve třídách (proměnné, metody): pokud jsou static, můžete vytvářet jejich instance (analogicky k přístupu ke statickým proměnným nebo volání statických metod) nezávisle na tom, zda máte instanci vnější třídy. Samozřejmě pouze pokud k nim máte přístup, platí obvyklý význam slov public, protected, private. Taková vnořená třída pak pochopitelně nemá přístup k instančním členům vnější třídy.

Vnořená třída, která není static, se nazývá vnitřní třída a je součástí instance vnější třídy. Je to užitečné, ale pokud tomu člověk příliš nerozumí, měl by používat pravidlo každá vnořená třída bude static. Zatímco u statických vnořených tříd má veřejný přístup (public) často smysl, u vnitřních tomu tak nebývá, většinou jsou soukromé (private) jenom pro potřeby vnějších tříd. Každopádně pokud je to opravdu potřeba, lze toto:
public class A {
  ...

  public class B {
    ...
  }
}

---

A a = new A();
A.B b = a.new B()
Ovšem úpěnlivě vás prosím: NEDĚLEJTE TO! :-) Fakt to moc nepomáhá čtení kódu, tahle konstrukce je hodně neobvyklá.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
14.7.2009 15:11 Majlo
Rozbalit Rozbalit vše Re: Java začátečník - práce s třídami v externích souborech
Odpovědět | | Sbalit | Link | Blokovat | Admin

Yep dík moc, stih sem na to přijít ještě včera :D Ale díky moc

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.