07. februar 2003 - 15:12Der er
17 kommentarer og 1 løsning
JInternalFrame always on top
Jeg er igang med at udvikle en applikation og er interesseret i at hører fra folk, som har erfaring i JInternalframes. Mit problem består i at selve applikationen består af en JFrame instance med en instance af JDeskTopPain som container. Ved tryk på en knap åbnes et JInternalFrame som indeholder nogle felter som skal udfyldes af brugeren. Denne JInternalFrame indeholder også en knap, som skal åbne et JInternalFrame til. Det sidste JInternalFrame skal blive på toppen af det første men ikke på toppen af JFrame.
Hvis der er nogen som har oplevet lignende problematik før, vil jeg blive meget glad for at høre fra dig. :-)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvad mener du helt præcist med "På toppen af JFrame"? Hvis då åbner JInternalFrames i et JDesktopPane som er contentPane i et JFrame vil de jo altid ligge indenfor JFramet.
jeg vil tro at noget i stil med myJInternalFrame.addInternalFrameListener(new InternalFrameListener() { public void internalFrameDeactivated(InternalFrameEvent e) { myJInternalFrame.getContentPane().requestFocus(); } }); kunne gøre tricket, uden at have afprøvet det.
Jeg prøvede lige din ide maddog... Og den funkede desværre ikke. Jeg synes nu at jeg bruger de rigtige metoder, men jeg må overse et eller andet...
Mange tak for hjælpen og hvis der er flere forslag tager jeg gerne imod...
Til viht: Det er jeg godt klar over, og det er lidt svært at forklare... Men Forestil dig den situattion: En bruger klikker på en knap og der åbnes et vindue hvor der skal indtastes nogle oplysninger... Men for at tilføje nogen andre oplysninger skal brugeren nu trykke på en knap der hedder "Tilføj" på det åbnede vindue (som er et et instance af JInternalFrame). Når brugeren trykker på "Tilføj" Popper der et vindue op, som skal lukkes inden brugeren kan vende tilbage til det forrige vindue! Det er denne effekt jeg gerne vil efterligne, men desværre viser det sig ret svært!
Jeg er fuldstændig med. Du vil gerne have den ene interne frame "pseudo-modal", altså fuldstændig afhæning af den anden interne frame. Har du overvejet at lave en indre klasse der virker som en dialog, blot med JnternalFrame istedet for JFrame?
Du må dog gerne forklare lidt mere hvordan, så kunne jeg komme lidt bedre igang. Hvis du altså sidder med en konkret ide (eller kode)... Så ville jeg være taknemlig.....
Dette har jeg gjort med en ComponentDialog, den kan du jo tilføje så mange komponenter til som du vil.. så den kan fungere som du vil have den. Den tillader ikke at vinduer bag den aktiveres.
problemet er at hans dialog skal være en modal dialog som selv er en intern frame. dette åbner en normal dialog. jeg kan godt lave en dialog i en intern frame (eller noget der ligner til forveksling), men ikke gøre den modal.
public class InternalFrameDemo extends JFrame { JDesktopPane desktop;
public InternalFrameDemo() { super("InternalFrameDemo");
//Set up the GUI. desktop = new JDesktopPane(); //a specialized layered pane desktop.putClientProperty("JDesktopPane.dragMode", "outline"); setContentPane(desktop);
final JInternalFrame frame1 = new JInternalFrame("TEST",true,true,true); final JInternalFrame frame2 = new JInternalFrame("Dialog",true,true,true); frame1.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameActivated(InternalFrameEvent e) { try {frame2.setSelected(true);} catch (java.beans.PropertyVetoException pve) {} } });
JButton b = new JButton("Open dialog"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame2.setVisible(true); try {frame2.setSelected(true);} catch (java.beans.PropertyVetoException pve) {} } }); frame1.getContentPane().add(b); b = new JButton("Cancel"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame2.setVisible(false); } }); frame2.getContentPane().add(b); b = new JButton("OK"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Do something"); frame2.setVisible(false); } }); frame2.getContentPane().add(b); frame1.setSize(100,100); frame2.setSize(100,100); frame1.setVisible(true); //necessary as of 1.3; OK to use before desktop.add(frame1); desktop.add(frame2); try { frame1.setSelected(true);} catch (PropertyVetoException e) {}
Jeps har lige modificeret koden og det virker... Vis du vil poste dit Kommentar som svar så er pointerne dine.. :-) (Bare nysgerrigt, så hvor fandt du det henne?)
Jeg lavede det selv. Da det er det første jeg har lavet med interne frames så jeg downloadede InternalFrameDemo for at greje syntaxen. Ganske få (5-10) linjer er tilbage.
jeg har faktisk prøvet alt andet end lige den måde... Meeen mange tak for hjælpen. :-)
Synes godt om
Ny brugerNybegynder
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.