Portál AbcLinuxu, 10. května 2025 00:29
Č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..
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).
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!
Yep dík moc, stih sem na to přijít ještě včera :D Ale díky moc
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.