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
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
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Grazie per aver risposto,
il codice è il seguente e poichè ho usato l'ambiente rad di netbeans la prima parte è stata generata automaticamente
nel costruttore ho messocodice: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));
mentre il metodo che crea i vari JinternalFrame è il seguente:codice:desktopPane.setLayout(new BorderLayout());
Grazie ancoracodice: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); }
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.
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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à
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à
Ripeto che non serve setLayout. E per impostazione del JInternalFrame, segui il tutorial.
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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
Il codice che crea il frame interno è il seguente:
che viene richiamato nell'azione così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); } }
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à
non è così facile come sembra.
Sicuramente devi mettere la tua funzione tra:
ma allo stesso tempo devi trovare una funziona che estragga dall'immgine le componenti R G Bcodice:image = new Immagine(file); //tuo codice pannelloP.createInternalFrame(image, fileChooser.getName(file));
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