Portál AbcLinuxu, 5. listopadu 2025 22:03
Č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!
Fakt to moc nepomáhá čtení kódu, tahle konstrukce je hodně neobvyklá.
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.