Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310

    Jdesktoppane e JinternalFrame

    Salve,
    vorrei tanto usare un jdesktoppane all'interno del quale far aprire vari Jinternalframe, ho creato creato graficamente il jdesktoppane ma visualizza oltre al desktoppane anche un'immagine della stessa dimensione, come posso toglierla?
    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cerza Visualizza il messaggio
    ma visualizza oltre al desktoppane anche un'immagine della stessa dimensione, come posso toglierla?
    Scusa, quale immagine? E comunque senza vedere il codice che hai usato, è più facile fare un terno al lotto piuttosto che capire quale è la problematica.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    Grazie per aver risposto,
    il codice è il seguente e poichè ho usato l'ambiente rad di netbeans la prima parte è stata generata automaticamente

    codice:
    desktopPane = new javax.swing.JDesktopPane();
    desktopPane.setBackground(new java.awt.Color(255, 255, 255));
    desktopPane.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder("Immagini Originali")));
    desktopPane.setForeground(new java.awt.Color(255, 255, 255));
    nel costruttore ho messo
    codice:
    desktopPane.setLayout(new BorderLayout());
    mentre il metodo che crea i vari JinternalFrame è il seguente:
    codice:
    
    public void createInternalFrame(Immagine image, String nomeFile) {
            JInternalFrame frame = new JInternalFrame("Frame");
            frame.setTitle(nomeFile);
            frame.setSize(new Dimension(10, 10));
            frame.setClosable(true);
            frame.setMaximizable(true);
            frame.setIconifiable(true);
            frame.setResizable(true);
            desktopPane.add(frame);
            frame.setVisible(true);
        }
    Grazie ancora

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Allora: setBackground ok, setBorder ok (non so perché hai usato 2 createTitledBorder ma se il risultato ti va bene .. ok). setForeground dubito che abbia senso, visto JDesktopPane di per sé non visualizza testo.

    Quote Originariamente inviata da cerza Visualizza il messaggio
    codice:
    desktopPane.setLayout(new BorderLayout());
    Questo di certo non serve. La proprietà 'layout' di JDesktopPane per default vale null = nessun layout manager. Non so dire ora se settare un layout causa problemi o no .... comunque non serve visto che JDesktopPane deve fare da "desktop" per più finestre draggabili a piacere.

    Per la creazione del internal frame, dovresti seguire la sequenza di impostazioni descritta nell'esempio in How to Use Internal Frames, perché perlomeno quella è la sequenza corretta e che funziona.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    Con il setLayout sono riuscita a vedere il JInternalFrame,che altrimenti non riuscivo a vedere, ma la cosa che non mi convince è l'immagine blu che inevitabilmente viene associata al jdesktoppane, così come mostrato in figura
    Immagine.jpg

    grazie per la disponibilità

  6. #6
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    Con il setLayout sono riuscita a vedere il JInternalFrame,che altrimenti non riuscivo a vedere, ma la cosa che non mi convince è l'immagine blu che inevitabilmente viene associata al jdesktoppane, così come mostrato in figura
    Immagine.jpg

    ed inoltre se riduco ad icona il JInternalFrame non si riduce in basso a sinistra ma resta così
    Immagine2.jpg
    grazie per la disponibilità

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da cerza Visualizza il messaggio
    Con il setLayout sono riuscita a vedere il JInternalFrame,che altrimenti non riuscivo a vedere
    Ripeto che non serve setLayout. E per impostazione del JInternalFrame, segui il tutorial.

    Quote Originariamente inviata da cerza Visualizza il messaggio
    ma la cosa che non mi convince è l'immagine blu che inevitabilmente viene associata al jdesktoppane, così come mostrato in figura
    Ho capito ..... nella tua applicazione viene impostato il look&feel chiamato Nimbus ed esso oltre ad avere un aspetto "cool" per gli altri componenti, per JDesktopPane mostra proprio quello sfondo predefinito.

    Per il Nimbus vedi anche: Changing the Color Theme
    e invece qui: http://stackoverflow.com/questions/1...eel-using-java
    spiega come impostare un nuovo Painter per JDesktopPane da usare al posto di quello fornito di serie dal Nimbus L&F.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    spiega meglio cosa vuoi fare.
    cosa vuol dire "non riesco a capire come indicare al metodo che trasforma in scala di grigio la sovrascrittura dell'immagine contenuta nel frame".
    posta un po di codice così capiamo meglio.
    ciao
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  9. #9
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    Il codice che crea il frame interno è il seguente:
    codice:
    public class PannelloPrincipale extends javax.swing.JPanel {
    public void createInternalFrame(Immagine image, String nomeFile) {
    
    
            JInternalFrame frame = new JInternalFrame("Frame");
            JPanel pannelloFrame = new JPanel();
            JLabel labelFrame = new JLabel();
            frame.add(pannelloFrame);
            pannelloFrame.add(labelFrame);
            labelFrame.setIcon(image.getImageIcon());
            //labelFrame.setIcon(image.getImageIcon());
            openFrameCount++;
    
    
            //setta il titolo con il nome del file
            frame.setTitle(nomeFile);
            frame.setSize(new Dimension(300, 300));
            //Utile per posizionare vari JInternalFrame
            frame.setLocation(xOffset * openFrameCount, yOffset * openFrameCount);
    
    
    
    
            //attiva la chiusura del frame
            frame.setClosable(true);
            //attiva la possibilità di aprire a tutto schermo
            frame.setMaximizable(true);
            //attiva la possibilità di chiudere ad icona
            frame.setIconifiable(true);
            //attiva la possibilità di ridimensionare con il muose ma non funziona correttamente
            frame.setResizable(true);
    
    
    
    
            // desktopPane.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);
            // desktopPane.setLayout(new BorderLayout());
    
    
            //desktopPane.setBackground(Color.blue);
            desktopPane.add(frame);
            frame.setVisible(true);
        }
    }
    che viene richiamato nell'azione così
    codice:
    public class AzioneCaricaFoto extends AbstractAction {
    
    private String acquisisciFile() {
            Vista vista = this.controllo.getVista();
            JFileChooser fileChooser = vista.getJfileChooser();
    
    
            PannelloMiniaturaJFileChooser pannelloMfc = (PannelloMiniaturaJFileChooser) pannelloP.getSottoVisteSecondarie(Costanti.PANNELLO_MINIATURA_JFILECHOOSER);
    
    
            pannelloMfc.getLabelMiniaturaFoto().setHorizontalAlignment(SwingConstants.CENTER);
            pannelloMfc.add(pannelloMfc.getLabelMiniaturaFoto(), BorderLayout.CENTER);
    
    
            fileChooser.setAccessory(pannelloMfc);
            fileChooser.addPropertyChangeListener(pannelloMfc);
    
    
    
    
            fileChooser.setApproveButtonText("Apri Foto");
            fileChooser.setDialogTitle("Selezionare un file");
            int codice = fileChooser.showOpenDialog(vista);
            if (codice == JFileChooser.APPROVE_OPTION) {
                File file = fileChooser.getSelectedFile();
                percorso = file.getPath();
                image = new Immagine(file);
    
    
        -->    pannelloP.createInternalFrame(image, fileChooser.getName(file));
    
    
                return percorso;
    
    
            } 
    
    
            //Reset the file chooser for the next time it's shown.
            fileChooser.setSelectedFile(null);
            return null;
        }

    A questo punto avrei trovato in rete il seguente codice

    codice:
    public class GrayscaleFilter extends PointFilter {
    
    
    	public GrayscaleFilter() {
    		canFilterIndexColorModel = true;
    	}
    
    
    	public int filterRGB(int x, int y, int rgb) {
    		int a = rgb & 0xff000000;
    		int r = (rgb >> 16) & 0xff;
    		int g = (rgb >> 8) & 0xff;
    		int b = rgb & 0xff;
    //		rgb = (r + g + b) / 3;	// simple average
    		rgb = (r * 77 + g * 151 + b * 28) >> 8;	// NTSC luma
    		return a | (rgb << 16) | (rgb << 8) | rgb;
    	}
    
    
    	public String toString() {
    		return "Colors/Grayscale";
    	}
    
    
    }

    che volevo posizionare nella classe Immagine per poi richiamarlo nell'azione Scala di grigio ma non lo so fare

    Grazie per la disponibilità

  10. #10
    non è così facile come sembra.
    Sicuramente devi mettere la tua funzione tra:

    codice:
    image = new Immagine(file);
    
    //tuo codice
    
    pannelloP.createInternalFrame(image, fileChooser.getName(file));
    ma allo stesso tempo devi trovare una funziona che estragga dall'immgine le componenti R G B

    poi applichi la tua funzione
    (a proposito ma a che serve x e y nella funzione :
    public int filterRGB(int x, int y, int rgb)
    non sono nel corpo della funzione e non vengono mai usate)

    e poi riapplichi l'RGB all'immagine prima di passarla al pannello

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

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.