Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20

    JPanel + Canvas (sunAwtCanvas) : Che è?

    Ciao a tutti,

    Chiedo aiuto per fare chiarezza su di un particolare.
    Premetto, ho lavorato poco con Java e più che altro lato WEB (JSP, Servlet), sono un po' a digiutno per l'aspetto "applicativo".

    Vorrei capire qual'è la logica con cui è stato costruito un certo applicativo. Non ho il codice, solo uno spy che mi da alcune informazioni basilari: Va bene, nel senso che vuol essere una discussione "teorica e di concetto" più che pratica nel dettaglio.

    A Vedersi sembra un normale panel, con le sue textArea, button, tab e via dicendo, ma quasi in "HTML Style".

    Se vado ad indagare con un programma tipo Spy++ rilevo queste informazioni:

    Finestra 000204DB2 "" SWT_Windows0
    - Finstra 000105D0 "RIEPLOGO DISTINTA - xxx.Srl" javax.swing.JFrame
    - - Finestra 000105D2 "" SunAwtCanvas
    - - Finestra 00110688 "RIEPLIGOLO DISTINTA - xxx.Srl" Static

    Non ho altre info da Spy++.

    Mi sembra non sia un'applicazione JPanel standard, ma vanga utilizzato questo oggetto SunAwtCanvas.
    Di Canvas so poco, ma non è una sorta di pannello per il drawing? è normale trovare un Canvas con all'interno controlli standard tipo label e textBox? Perchè non utilizzare un normale JPanel allora?

    Forse è un po' troppo generico come post.. ma se qualcuno avesse avuto a che fare con oggetti di questo tipo e volesse darmi qualche tips per capirci di più, gle ne sarei grato.

    Mi piacerebbe fare e riprodurre una cosa semplicissima con NetBeans di quel tipo

    Per ora grazie...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    ..mi rendo conto la mia domanda sia un po' troppo generica, m anessuno ha commenti da fare su questa cosa?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Direi che è praticamente impossibile dirti nulla.
    SunAwtCanvas non mi risulta essere una classe facente parte del core standard. Potrebbe essere inclusa in una libreria di cui fa uso la tua applicazione. Potrebbe, per quel che ne so, essere essa stessa una classe creata da chi ha costruito l'applicazione. Se io ho bisogno di avere una classe che mi estende JPanel, la posso chiamare come voglio...

    Potrebbe, altresì, essere una classe specifica del LookAndFeel usato dall'applicazione, platform-dependent (ma noi non sappiamo nemmeno su quale sistema tu stia avviando l'applicazione).

    Già il fatto che la prima finestra sia "SWT_Windows0" mi fa pensare che lo sviluppatore abbia utilizzato SWT per il design e che quindi non si sia appoggiato direttamente a Swing.

    Direi che l'unico modo per avere le informazioni che cerchi è di avere il sorgente dell'applicazione (sempre che tu ne abbia i diritti) o rivolgerti allo sviluppatore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    grazie per la replica.

    E' chiaro quello che dici, cioè che è veramente difficile commentare quello che ho scritto se non per fare supposizioni... ma ti sono grato per averne fatte! Mi da modo di pensare.

    Ho fatto un piccolo esperimento, cercando di far girare una applet sotto un comune JPanel. ed andando a vedere con Spy++ mi sono trovato quel fantomatico sunAvgCanvas come figlio del Frame principale (non un javax.swing.JPanel): Potrebbe essere una cosa di questo tipo, cioè una applet fatta girare a mo' di applicazione sotto un JPanel (con il suo bel menù..)?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Effettivamente, cercando con Google escono diverse discussioni riguardanti proprio le Applet.
    Credo che quella sia una classe usata internamente dalla JVM per interfacciarsi con il supporto grafico del sistema operativo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    Grazie ancora per la replica!

    Quindi, in questo caso, il sistema integrato nella JVM sarebbe a tutti gli effetti una applet... soluzione comune oppure atipica?

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non ho capito...

    Hai detto tu che hai cercato di far girare una applet all'interno di un JPanel... mi rimane da capirne il motivo, dato che un'applet è sì un componente (che può essere aggiunto, quindi, ad un pannello), ma così facendo non ha la "vita propria" dell'applet (che necesita di una sendbox per funzionare)...

    Mi rimane anche da capire il perchè di tutta questa questione attorno a questo oggetto SunAwtCanvas... che nulla ha a che fare con la progettazione della GUI di una normale applicazione Java desktop.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    ..grazie ancora.

    in realtà sono un po' confuso a riguardo, ma grazie per gli spunti.
    Cercherò di cavare qualche altra info se posso.... :|

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    residenza
    Alcatraz
    Messaggi
    20
    Ancora io

    Non voglio essere tedioso con questo Post (anzi.. lo sono.. vabbè), ma ho avuto modo di approfondire la cosa, purtroppo senza avere i famigerati sorgenti (cosa impossibile, pare).

    Comunque, dopo varie prove sono riuscito ad ottenere, con un esempietto, una struttura che risponde a questa struttura (via Spy++)

    SWT_Windows0
    - SWT_Windows0
    - - SunAwtFrame
    - - - SunAwtCanvas

    Dove, come dicevi tu, l'oggetto SWT_Windows0 deriva dal fatto di utilizzare SWT nel mio bel progetto sotto Eclipse.

    Il tutto deriva da questo codice:
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.awt.SWT_AWT;
    import org.eclipse.swt.layout.FillLayout;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Display;
    import org.eclipse.swt.widgets.Shell;
    
    
    /**
     * @author core
     *
     */
    public class SwgDummy {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		
    		final Display display = new Display();
    	    final Shell shell = new Shell(display);
    	    
    	    shell.setLayout(new FillLayout());
    	    
    	    Composite composite = new Composite(shell, SWT.NO_BACKGROUND
    	            | SWT.EMBEDDED);
    	    
    	    /*
    	     * Set a Windows specific AWT property that prevents heavyweight
    	     * components from erasing their background. Note that this is a global
    	     * property and cannot be scoped. It might not be suitable for your
    	     * application.
    	     */
    	    try {
    	      System.setProperty("sun.awt.noerasebackground", "true");
    	    } 
    	    catch (NoSuchMethodError error) {
    	    }
    	    
    	    
    	    /* Create and setting up frame */
    	    Frame frame = SWT_AWT.new_Frame(composite);	   	    
    	    Panel panel = new Panel(new BorderLayout()) {
    	      public void update(java.awt.Graphics g) {
    	        /* Do not erase the background */
    	        paint(g);
    	      }
    	    };
    	    frame.add(panel);
    	    JRootPane root = new JRootPane();
    	    panel.add(root);
    	    Container contentPane = root.getContentPane();
    
    	    shell.open();
    	    while (!shell.isDisposed()) {
    	      if (!display.readAndDispatch())
    	        display.sleep();
    	    }
    	    display.dispose(); 
    
    	}
    
    }
    "Sento" che mi sto avvicinando al "mistero" della struttura dell'applicazione x, anche se non è proprio la stessa desiderata.

    In particolare, non capisco come una JFrame possa essere child del Frame AWT principale.. o almeno, a guardare la struttura così mi viene da pensare

    SWG_Window0
    - SWG_Window0
    - - javax.swing.JFrame
    - - - SunAwtCanvas

    Penso proprio le applet non c'entrino nulla e che questo famigerato SunAwtCanvas non sia altro che un contenitore, frame particolare o simile.. non so bene ancora il suo contesto.

    Posto.. nella speranza di avere altri pareri su questa cosa...

    Gra'

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.