Avatar billede mtilsted Nybegynder
14. august 2001 - 18:31 Der er 5 kommentarer og
1 løsning

JPopup i JRootPane i JFrame

Jeg har en JFrame, som indeholder en JSplitPane som indeholder en JRootPane som indeholder et component P.

Hvis jeg saa har
{
  JPopupMenu Pop=new JPopupMenu(...);  // A popup menu.
  Pop.show(P);
}

Saa kan den popup menu ikke komme ude af den JRootPane den ligger i. Hvilket vil sige at den bare bliver clipet ved kanten -(((
Avatar billede mtilsted Nybegynder
14. august 2001 - 18:32 #1
Og spørgsmaalet er naturligvis: Hvad gør jeg ved det?

Avatar billede logical Nybegynder
16. august 2001 - 08:03 #2
Har du lavet sådan ca. denne her:

JSplitPane split = new JSplitPane(new JRootPane(....


Så du har indlejret en JRootPane som en af dine komponenter i din split.

Hvorfor har du dog gjort det :-)

En JRootPane er en grundkomponent for komponenter, som er roden af et GUI træ.
En JRootPane indeholder en JLayeredPane, hvoraf det ene layer er en \"glass pane\", mens det anden indeholder JMenuBar og \"content pane\", som bare er en JComponent. Hvis man lægger andre ting herind, skal man lige vide, at optegningen af en JRootPane er specifik til det her scenario.

Efter som det er en root komponent du har fat i, skal du lægge komponenter ind som \"content\" i dens \"Content pane\".
dvs.

JRootPane root = new JRootPane();
root.getContentPane().add(P);
Avatar billede mtilsted Nybegynder
16. august 2001 - 16:09 #3
Jeg har gjort det, da jeg skulle have et component, hvor jeg kunne ligge en JMenuBar :}
Og dit eksempel har netop det problem at jeg ikke kan faa popup menuen(Samt alle mine JMenuBarItem) til at gaa ud over den JRootPane

Avatar billede logical Nybegynder
17. august 2001 - 08:11 #4
Jeg tænkte det nok, det virker så nemt og bekvemt, ikke :-)

En JMenuBar er en almindelig component, som du kan placere hvor du lyster.
Så jeg vil anbefale, at du bare laver en JMenuBar og smider NORTH i et panel i din splitpane. Du kan evt. fremhæve din menubar (hvis resten også er gråt), f.eks. med en BevelBorder:

menubar.setBorder(new BevelBorder(BevelBorder.RAISED));
panel.add(menubar, BorderLayout.NORTH); << Eller SOUTH for den sags skyld :-)
Avatar billede mtilsted Nybegynder
17. august 2001 - 18:46 #5
Men hvis det er saa nemt, hvorfor er der saa en speciel SetJMenuBar funktion???
Avatar billede logical Nybegynder
17. august 2001 - 19:48 #6
Sikkert fordi:

1) At man supporterer direkte en menubar i north, uden at folk skal kunne kode for meget, og der er ingen mulighed for andre typer komponenter direkte.
2) Man troede det nok ville være standard i de fleste root-containere
3) Man har ikke mulighed for at sætte nogen anden type component ind på den plads
4) Fordi månen er lavet af grøn ost :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester