Avatar billede steenk Nybegynder
15. maj 2002 - 13:28 Der er 9 kommentarer og
1 løsning

Navigering mellem JFrames (modal ja/nej)

Jeg designer pt en brugergrænseflade med en række GUI's implementeret med JFrame's. Jeg ønsker fra nogle GUI's at lade brugeren åbne en ny GUI (child) som skal være modal - den SKAL altså lukkes hvorefter der returneres til hoved-GUI'en (parent). OG... inden child lukkes helt skal parent have adgang til data i child!

Nogen forslag til løsninger - kan JFrames eks. gøres modal ?
Avatar billede carstenknudsen Nybegynder
15. maj 2002 - 13:58 #1
Du kan altid smide getContentPane() fra
en JFrame ind i en modal fra fra
JOptionPane klassen, men du mister
din JMenuBar hvis du bruger en sådan.
Avatar billede steenk Nybegynder
15. maj 2002 - 14:10 #2
Jeg ønsker at have en 'application GUI', som rummer en fælles menu og toolbar for hele applikationen, så de enkelte GUI's har ikke menubars eller toolbars. Men mister man virkeligt ikke andet hvis man bruger en JOptionPane ? Kan sådan en rumme alle de øvrige Swing komponenter ?
Avatar billede carstenknudsen Nybegynder
15. maj 2002 - 14:40 #3
Ja, du kan smide et JPanel ind i dem,
og det JPanel kan indeholde alt hvad
hjertet begærer.
JOptionPane.showConfirmDialog( c, "jkjk" );
kan vise en hvilkensomhelst Component,
f.eks. et JPanel der indholder 36 komponenter.
Der er en hel række af statiske metoder
som showConfirmDialog som du kan benytte
alt efter hvad du har brug for.
Avatar billede steenk Nybegynder
15. maj 2002 - 14:44 #4
Tak for de meget positive svar. Har ikke afprøvet det endnu, men det lyder som en brugbar løsning.
Avatar billede carstenknudsen Nybegynder
15. maj 2002 - 14:48 #5
Jeg bruger dem selv så hvis du er i tvivl
om hvilke statiske metoder du skal bruge
så læg en kommentar her i spørgsmålet,
så skal jeg gerne komme med et forslag
eller to.
Avatar billede steenk Nybegynder
15. maj 2002 - 14:56 #6
Tusind tak - jeg er meget interesseret i at se nogle eksempler på kode/diagrammer, specielt hvordan du håndterer udveksling af data/kald af metoder mellem parent & child. Send venligst til steenklingenberg@hotmail.com - min spam-mailadresse - der ku' jo være røvere her ;-)
Avatar billede carstenknudsen Nybegynder
16. maj 2002 - 07:25 #7
Skal bikse et eksempel sammen før
frokost.
Avatar billede carstenknudsen Nybegynder
16. maj 2002 - 08:34 #8
Her er et simpelt eksempel hvor du ved at
trykke på den første knap får en modal
frame op. Der kan du tælle op med knappen
og hvis du trykker ok ryger resultatet
op i parent framens text felt.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MyFrame extends JFrame implements ActionListener {
    private JButton button1, button2;
    private JTextField text;
    public MyFrame() {
    super( "This is MyFrame" );
    Container c = getContentPane();
    c.setLayout( new FlowLayout() );
    button1 = new JButton( "First" );
    button1.addActionListener( this );
    text = new JTextField( 10 );
    button2 = new JButton( "Second" );
    c.add( button1 );
    c.add( text );
    c.add( button2 );
    pack();
    }
    public void actionPerformed( ActionEvent ae ) {
    if ( ae.getSource().equals( button1 ) ) {
        JPanel panel = new JPanel();
        panel.setLayout( new FlowLayout() );
        final JButton b = new JButton( "Hit me" );
        final JTextField t = new JTextField( 4 );
        t.setText( "0" );
        t.setEditable( false );
        panel.add( b );
        panel.add( t );
        Listener listener = new Listener( t );
        b.addActionListener( listener );
        int code = JOptionPane.showConfirmDialog( MyFrame.this,
                              panel,
                              "Count something",
                              JOptionPane.OK_CANCEL_OPTION,
                              JOptionPane.PLAIN_MESSAGE );
        if ( code == JOptionPane.OK_OPTION ) {
        MyFrame.this.text.setText(""+listener.getInt());
        }
    }
    }
   
    private class Listener implements ActionListener {
    private JTextField text;
    public Listener( JTextField text ) {
        this.text = text;
    }
    public void actionPerformed( ActionEvent ae ) {
        int i = Integer.parseInt( text.getText() );
        text.setText( "" + ( i + 1 ) );
    }
    public int getInt() {
        return Integer.parseInt( text.getText() );
    }
    }

   
   
    public static void main( String[] args ) {
    JFrame frame = new MyFrame();
    frame.show();
    }
}
Avatar billede steenk Nybegynder
17. maj 2002 - 09:54 #9
Tak for kodeeksemplet - det fungerer jo storartet. Har samtidig kigget lidt på JInternalFrame og her er der bestemt også nogle muligheder eftersom de kan konstrueres uden de 'gængse' lukkeknapper og derfor kan brugeren 'tvinges' til at lukke kun at lukke via eks. en JButton.
Avatar billede carstenknudsen Nybegynder
17. maj 2002 - 10:16 #10
Det lyder fint. Hvis du er bekymret ang.
lukkeknapper kan man også bruge JWindow
hvor man ligesom JFrame tilføjer til
getContentPane(); dog har et JWindow
ingen rand/border så den skal man
selv inkludere. JInternalFrames er bestemt
også en god løsning som jeg selv har brugt
når man vil sikre sig at nogle vinduer
(evt ikonoficeret) altid eksisterer og
ikke forsvinder bag andre vinduer i andre
applikationer. Kommunikationen mellem vinduer
med JInternalFrames er identisk til kommunikationen
mellem normale frames.
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