Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Problema nella visualizzazione JInternalFrame su JDesktopPane
Forum - Java - Problema nella visualizzazione JInternalFrame su JDesktopPane

Avatar
Blackman (Normal User)
Newbie


Messaggi: 1
Iscritto: 10/02/2012

Segnala al moderatore
Postato alle 15:50
Venerdì, 10/02/2012
Buongiorno a tutti, sono nuovo del forum e del linguaggio Java... per cercare di imparare mi dedico ad un po' di prove, ma ho trovato diverse difficoltà con le interfacce grafiche. E' il primo linguaggio ad oggetti che affronto, quindi capirete che alcuni concetti non mi siano proprio immediati.
Il problema è questo: voglio un JInternalFrame (che conterrà un JMenù) su di un JDesktopPane (che funge da background, con immagine). Visualizzo lo sfondo, ma il JInternalFrame viene inesorabilmente visualizzato "dietro" o "sotto" il background... esiste (in quanto se lo clicco con il mouse lo posso trascinare, vedendo ovviamente un pezzo di sfondo che si muove) ma non si vede. Ho provato diverse soluzioni ed ho letto quanto ho trovato in rete, ma evidentemente, sbaglio qualcosa o non vedo chiaramente dove sia il problema.
il codice è questo:
Codice sorgente - presumibilmente Java

  1. // vari import...
  2.  
  3. public class backg extends JPanel
  4. {
  5.         static boolean resizable = false;
  6.         static boolean closeable = false;
  7.         static boolean maximizable = false;
  8.         static boolean iconifiable = false;
  9.  
  10.         private static JInternalFrame Internalframemenu()
  11.         {
  12.                        
  13.           String title = "Menù";
  14.           JInternalFrame internalframemenu = new JInternalFrame(title, resizable,     closeable, maximizable, iconifiable);
  15.                  
  16.           return internalframemenu;        
  17.         }
  18.  
  19.         private static void GUI () throws PropertyVetoException
  20.         {      
  21.            JFrame frame = new JFrame("prova");
  22.            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
  23.            frame.setDefaultCloseOperation(JInternalFrame.EXIT_ON_CLOSE);
  24.            frame.repaint();
  25.                    
  26.            JDesktopPane backgnd = new Background();
  27.            backgnd.setOpaque (false);
  28.            backgnd.repaint();
  29.            backgnd.setVisible(true);
  30.  
  31.            frame.getContentPane().add(backgnd);
  32.            
  33.            JInternalFrame internalframemenu = Internalframemenu();
  34.            internalframemenu.moveToFront();
  35.            internalframemenu.setSelected(true);
  36.            internalframemenu.repaint();
  37.  
  38.            frame.setVisible(true);
  39.                        
  40.            backgnd.add(internalframemenu);
  41.                    
  42.            internalframemenu.setBounds(50,50,300,300);
  43.            internalframemenu.show();
  44.         }
  45.  
  46.        public static void main(String[] args)
  47.         {
  48.            javax.swing.SwingUtilities.invokeLater(new Runnable()
  49.             {
  50.               public void run()
  51.               {
  52.                  try {
  53.                         GUI();
  54.                        }
  55.                   catch (PropertyVetoException e)
  56.                        {
  57.                           e.printStackTrace();
  58.                         }
  59.                }
  60.              });
  61.            }
  62.  
  63.          public static class Background extends JDesktopPane
  64.         {
  65.            private Image img;
  66.                
  67.            public Background(String sourceimg)
  68.            {
  69.              String pathbg;
  70.              pathbg = "C:\\Users\\...\\img1.jpg";
  71.             }
  72.             img = Toolkit.getDefaultToolkit().createImage (pathbg);
  73.             loadimage(img);            
  74.           }
  75.                        
  76.             private void loadimage (Image img)
  77.             {
  78.               try
  79.                 {
  80.                   MediaTracker track = new MediaTracker(this);
  81.                   track.addImage(img, 0);
  82.                   track.waitForID(0);
  83.                  }
  84.                catch (InterruptedException e)
  85.                 {
  86.                   e.printStackTrace();
  87.                 }
  88.               }
  89.                
  90.                 public void paint (Graphics g)
  91.                 {
  92.                    g.drawImage(img, 0, 0, null);
  93.                    super.paintComponent(g);
  94.                    setOpaque (false);
  95.                 }
  96.              }
  97.           }



Spero di non essermi perso nulla nel copia-incolla.
Grazie a chiunque voglia provare ad aiutarmi.

PM
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 0:09
Sabato, 11/02/2012
Guarda qui che c'è un esempio che spiega molto bene il funzionamento:
http://www.java2s.com/Tutorial/Java/0240__Swing/AddingInte ...

Intanto grazie per la risposta... ho ri-guardato quell'esempio ma... nulla... non capisco... mi sembra di essere in linea con quel codice... se hai visto qualcosa, dammi qualche dritta perchè non ci arrivo... grazie!! - Blackman - 11/02/12 00:20
PM
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 19:36
Domenica, 12/02/2012
Per cercar di risolvere il tuo problema dovrebbe bastare questo:
Codice sorgente - presumibilmente Plain Text

  1. jDesktopPane.setSelectedFrame(jInternalFrameCheVuoiAttivare); //che setta ad attivo il JInternalFrame specificato nella funzione.



Qualora questo non dovesse bastare, potresti provare a spostare il JInternalFrame, mettendolo in primo piano attraverso questo:
Codice sorgente - presumibilmente Plain Text

  1. jInternalFrameInQuestione.toFront();



In ultima analisi puoi richiare semplicemente il metodo show sul JInternalFrame desiderato --> in tal modo questo verrà reso visibile (se non lo era), portato cmq in primo piano e selezionato!
Spero che qualcuno di questi passaggi possa risolvere il tuo problema perchè in teoria è tutto :rofl:

Ultima modifica effettuata da bububs il 12/02/2012 alle 19:37
... nel codice che ho postato cio sono già questi passaggi: - Blackman - 12/02/12 21:22
backgnd.add(internalframemenu); internalframemenu.moveToFront(); internalframemenu.show(); ho provato anche ad eseguirli in ordine diverso.... ma non va ancora... sono senza idee... se ti venisse in mente altro, fammi sapere... grazie comunque!! - Blackman - 12/02/12 21:27
PM