2011-05-25 4 views
2

Je souhaite utiliser un JInternalFrame comme JDialog modal en mode plein écran, cependant, il n'est pas actuellement montré quand il est appelé. Ai-je besoin de l'ajouter à un conteneur? J'ai essayé de l'ajouter à un JOptionPane.showInternalMessage (...), mais puisque je veux que la boîte de dialogue disparaisse automatiquement après 3 secondes, cela ne fonctionnerait pas, car la boîte de dialogue JOptionPane resterait là jusqu'à ce que quelqu'un clique sur OK.JInternalFrame en mode plein écran

Une idée? Merci beaucoup.

Répondre

3

Oui, vous devez l'ajouter à un conteneur dans lequel vous voulez qu'il soit «interne». Ci-dessous vous avez un exemple qui vous montre ce comportement.

Vous pouvez remarquer ici que le cadre interne (qui apparaîtra/masquer à la pression de la souris à l'intérieur du cadre) n'est pas peint sur le panneau EAST, car il est découpé lorsqu'il sort des limites de son parent.

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.FlowLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JInternalFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class InternalFrameTest extends JPanel 
{ 
    private static final long serialVersionUID = 1L; 
    private JInternalFrame internalFrame; 
    public InternalFrameTest() 
    { 
     this.internalFrame = new JInternalFrame("Internal frame"); 
     internalFrame.setLayout(new FlowLayout()); 
     internalFrame.add(new JLabel("I am label")); 
     internalFrame.add(new JButton("Oi button"));  
     internalFrame.pack(); 
     add(internalFrame); 
    } 

    public void showHideInternalFrame() 
    { 
     internalFrame.setVisible(!internalFrame.isVisible()); 
    } 
    public static void main(String[] args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      {    
       final InternalFrameTest ift = new InternalFrameTest(); 
       ift.setBackground(Color.GREEN); 
       JFrame f = new JFrame(); 
       f.addMouseListener(new MouseAdapter() 
       { 
        @Override 
        public void mousePressed(MouseEvent e) 
        { 
         super.mousePressed(e); 
         ift.showHideInternalFrame(); 
        }     
       }); 
       JPanel cp = new JPanel(new BorderLayout()); 
       cp.add(ift); 
       JPanel eastP = new JPanel(); 
       eastP.add(new JLabel("EAST")); 
       eastP.setBackground(Color.YELLOW); 
       cp.add(eastP, BorderLayout.EAST); 
       f.setContentPane(cp); 
       f.setSize(400, 300); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       f.setVisible(true); 
      } 
     }); 
    } 
} 
+2

Voir aussi [Comment utiliser des images internes] (http://download.oracle.com/javase/tutorial/uiswing/components/internalframe.html). – trashgod