15. maj 2002 - 13:28Der 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 ?
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.
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 ?
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.
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.
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 ;-)
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(); } }
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.
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.
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.