Java swing: Přepsání metody setLayout() pro potomky JFrame – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Java swing: Přepsání metody setLayout() pro potomky JFrame – Java – Fórum – Programujte.comJava swing: Přepsání metody setLayout() pro potomky JFrame – Java – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Aleš
~ Anonymní uživatel
98 příspěvků
13. 11. 2012   #1
-
0
-

Zdravím.

Snažím se o vytvoření třídy rozšiřující JFrame. Mým cílem je mít třídu "FrameWithMenu", od které budou odvozeny všechny formuláře v programu. Jedinou změnou by mělo být, že potomek třídy "FrameWithMenu" bude formulář s menu v horní části. Víc Vám to asi osvětlí kód:

public class FrameWithMenu extends javax.swing.JFrame {

    protected JMenuBar MainMenuBar ;
    protected JMenu MainMenu;
    protected JPanel Panel;
   
    public FrameWithMenu(String title) throws HeadlessException {
        super(title);      
        super.setLayout(new BorderLayout());
       
        MainMenuBar = new JMenuBar();
        MainMenu = new JMenu("Menu");
       
        super.add(MainMenuBar, BorderLayout.NORTH);
        MainMenuBar.add(MainMenu);
        MainMenu.add(new JMenuItem("Item"));
       
        Panel = new JPanel();
        super.add(Panel);      
    }
   
    @Override
    public Component add(Component c)
    {
       return Panel.add(c);
    }
   
    @Override
    public void setLayout(LayoutManager lm)
    {
       this.Panel.setLayout(lm);
    }

Jde mi tedy o to aby potomek FrameWithMenu byl normální formulář s menu v horní části, a metody setLayout() a add() aby pracovali místo s celým formulářem pouze s panelem v něm vloženým.

Problém nastává u metody setLayout(). Při spuštění programu ve kterém vytvořím a zobrazím instanci této třídy se mi objeví nullPointerException. Mohl by mmi někdo poradit co dělám špatně? Obsah metody main a detail vyjímky viz níže:

public static void main(String[] args) {
        FrameWithMenu RBC = new FrameWithMenu("aa");       
        RBC.setVisible(true);
    }

Exception in thread "main" java.lang.NullPointerException
at GUI.FrameWithMenu.setLayout(FrameWithMenu.java:56)
at java.awt.Window.init(Window.java:492)
at java.awt.Window.<init>(Window.java:535)
at java.awt.Frame.<init>(Frame.java:420)
at javax.swing.JFrame.<init>(JFrame.java:224)
at GUI.FrameWithMenu.<init>(FrameWithMenu.java:29)
at Main.Main.main(Main.java:23)
Java Result: 1

Předem děkuji.

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
Reklama
Reklama
sakal910
Stálý člen
13. 11. 2012   #2
-
0
-

#1 Aleš
Já sem to zkompiloval a spustil a vše mi najelo v pohodě! Žádná vyjímka nenastala, zobrazilo se mi okno s horním Menu :) takže předpokládám že chyba bude někde jinde :)

Nahlásit jako SPAM
IP: 31.222.8.–
Aleš
~ Anonymní uživatel
98 příspěvků
13. 11. 2012   #3
-
0
-

#2 sakal91
Tak já udělal to samý, nakopíroval jsem to do novýho projektu a nullpointru sem se nezbavil. Zkoušel jsem to i u spolubydlícího na kompu a stejná vyjímka jako u mě :( Ještět někomu to fungovalo ?

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
sakal910
Stálý člen
13. 11. 2012   #4
-
0
-

#3 Aleš
A co používáš za IDE?

Nahlásit jako SPAM
IP: 31.222.8.–
Aleš
~ Anonymní uživatel
98 příspěvků
13. 11. 2012   #5
-
0
-

#4 sakal91
Netbeans 7.1.2 . Kolega u kterýho jsem to zkoušel používá to samý. Zkusim eclipse

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
sakal910
Stálý člen
13. 11. 2012   #6
-
0
-

#5 Aleš
A je to celý zdroják tady nebo tam máš něco jiného navíc?:)

Nahlásit jako SPAM
IP: 31.222.8.–
Aleš
~ Anonymní uživatel
98 příspěvků
13. 11. 2012   #7
-
0
-

#6 sakal91
Mám tam něco navíc - 2 samostatný třídy. Ty ale nepoužívám, a když jsi napsal že ti to jde tak jsem založil novej projekt a zkusil tam nakopírovat pouze to co máš ty. A nešlo to

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
sakal910
Stálý člen
13. 11. 2012   #8
-
0
-

#7 Aleš
Tak to už nvm :D Asi mám kouzelné IDE :D

Nahlásit jako SPAM
IP: 31.222.8.–
Aleš
~ Anonymní uživatel
98 příspěvků
13. 11. 2012   #9
-
0
-

#8 sakal91
Zkoušim ty eclipse, ale chvíli to trvá, dlouho jsem s nima nedělal. Každopádně díky moc za pomoc. Jak na něco příjdu tak to sem hodim :)

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
Aleš
~ Anonymní uživatel
98 příspěvků
13. 11. 2012   #10
-
0
-

#8 sakal91
Tak ani v Eclipsech to nejede, opět nullPointerEx...   Bylo by možný tě požádat jestli bys celej ten tvůj funkční projekt nezabalil a třeba přes uloz.to nebo leteckou postu poslal? zkusil bych ho bezezměny otevřít :)

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
sakal910
Stálý člen
13. 11. 2012   #11
-
0
-

#10 Aleš
http://uloz.to/xEZpmL2/testovaciaplikace-zip

Nahlásit jako SPAM
IP: 31.222.8.–
sakal910
Stálý člen
13. 11. 2012   #12
-
0
-

#10 Aleš
Je tam ještě jedna třída, tu si smaž té si nevšímej :D

Nahlásit jako SPAM
IP: 31.222.8.–
Aleš
~ Anonymní uživatel
98 příspěvků
13. 11. 2012   #13
-
0
-

#12 sakal91
Tak už chápu proč ti to jde :D Ty tam nemáš původce problému, a to metodu setLayout() :D

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
sakal910
Stálý člen
13. 11. 2012   #14
-
0
-

#13 Aleš
Ježiš já sem deb*l :D tak jdu ji tam přidat :D

Nahlásit jako SPAM
IP: 31.222.8.–
sakal910
Stálý člen
13. 11. 2012   #15
-
0
-

#13 Aleš


můžu se jen zeptat na co přesně to potřebuješ tu třídu? Předpokládám že JFrame budeš mít jen jeden a jinak budeš pracovat s panely:)

Nahlásit jako SPAM
IP: 31.222.8.–
Dano
~ Anonymní uživatel
100 příspěvků
14. 11. 2012   #16
-
0
-

Mam dojem, ze problem NullPointeru je v tom, ze ked sa vola rodic

super(title);

zavola sa pretazena metoda 

setLayout(LayoutManager lm)

kde 

this.Panel

nie je definovany, lebo je deklarovany ako 

protected JPanel Panel;
Nahlásit jako SPAM
IP: 78.98.66.–
sakal910
Stálý člen
14. 11. 2012   #17
-
0
-

#16 Dano
to bude asi ono :) Jen se divím že to děláš tak složitě :) mě to příjde zbytečné :)

Nahlásit jako SPAM
IP: 31.222.8.–
Aleš
~ Anonymní uživatel
98 příspěvků
14. 11. 2012   #18
-
0
-

l#15 sakal91

Právě že budu mít aplikaci s více různými formuláři. Řekněme že dělám aplikaci pro něco jako je výrobní(spíš repasovací) linka. Ta má několik stanovišť v dané posloupnosti(demontáž, rozpájení, čištění, pájení, montáž atd.) Ne však každý výrobek jde přes všechny stanice, nýbrž jeden jde přes stanice např. 1,2,5,6 a druhý pouze 1,3,4. Proto chci pro každou stanici vytvořit formulář. Problém je že každý formulář bude jiný, jediným stejným prvkem bude právě toto menu. A v souladu s OOP chci právě vytvořit formulář s tímto menu, a poté budu dědit od této třídy všechny další formuláře. S těma už bych mohl pracovat jako s normálním JFrame (přidávat prvky, nastavovat layout), ale přitom bych nepracoval s celými okny, ale pouze se zbytkem okna(panelem) pod zmíněným menu. Snad jsem to vysvětlil nějak srozumitelně :)

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
Dano
~ Anonymní uživatel
100 příspěvků
14. 11. 2012   #19
-
0
-

#18 Aleš
Ked chces rozbehat svoj kod, staci Ti vytvorit getter pre Panel

public JPanel getPanel() {
    if (Panel == null) {
        Panel = new JPanel();
    }
    return Panel;
}

a zmenit riadok 

 this.Panel.setLayout(lm);

na
 

getPanel().setLayout(lm);
Nahlásit jako SPAM
IP: 78.98.66.–
Aleš
~ Anonymní uživatel
98 příspěvků
14. 11. 2012   #20
-
0
-

#16 Dano
Problémem je , že nemůžu definici  :

Panel = new JPanel();

dát před  :

super(title)

neboť mi to začne nadávat že volání konstruktoru předka musí být na prvním místě

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
Dano
~ Anonymní uživatel
100 příspěvků
14. 11. 2012   #21
-
0
-

#20 Aleš
Od toho  je ta getter metod, ked zisti, ze this.Panel je null, zavola jeho inicializaciu ;) a super nebude pindat

Nahlásit jako SPAM
IP: 78.98.66.–
Aleš
~ Anonymní uživatel
98 příspěvků
14. 11. 2012   #22
-
0
-

#21 Dano
Promiň, já si nevšiml že jsi to tam ještě napsal. Díky moc. NullPointeru sem se zbavil, ale pořád to není ono. Objeví se okno, ale není tam vykreslené to menu. To už snad bude nějaká blbost na kterou snad přijdu. Ještě jednou díky všem :)

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
Aleš
~ Anonymní uživatel
98 příspěvků
14. 11. 2012   #23
-
0
-

#22 Aleš
Tak jsem sice míň ztracenej, ale stále bloudím. Když to upravíte podle Dana, zobrazí se vám formulář s menu? Mě se objeví formulář, ale je trochu nemocnej... :(

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
sakal910
Stálý člen
14. 11. 2012   #24
-
0
-

#23 Aleš
Já být tebou tak si udělám Jeden hlavní JFrame, a pak si upravuju zvlášť JPanely :) To o co se snažíš mi příjde jako totální blbost :D jen jsou s tím problémy :)

Nahlásit jako SPAM
IP: 31.222.8.–
Dano
~ Anonymní uživatel
100 příspěvků
14. 11. 2012   #25
-
0
-
Nahlásit jako SPAM
IP: 195.28.127.–
Aleš
~ Anonymní uživatel
98 příspěvků
14. 11. 2012   #26
-
0
-

#25 Dano
Jj, takovej je víceméně účel. Asi se na to jak to dělám vy***** a udělám to podobně jako v odkazu který jsi mi posílal. Ale tak jak jsem to dělal mi to přijde víc ve stylu OOP, univerzálnější a vesměs i jednoduší. Bohužel ale nefunkční...

Nahlásit jako SPAM
IP: 2001:718:1c01:154:99f3:bd...–
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, 31 hostů

Podobná vlákna

Java GUI jFrame — založil brbla

Java Swing — založil Falcon1651

Java swing - JButton — založil petr143

Java swing TImer — založil Anonym

Moderátoři diskuze

 

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