|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
[Java][NetBeans] Immagini.
In NetBeans, con matisse... Devo inserire un'immagine che deve ruotare di un tot di gradi inseriti dall'utente in una JTextField... (Minimo 0°, Massimo 90°) Come posso fare?
Help.. (45° post mio.. sulle immagini... XD)
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Carica l'immagine in modo da avere un Image, crea una tua classe che estende ad esempio JPanel e in cui disegnerai in paintComponent() la immagine. Con rotate() di Graphics2D imposta un angolo di rotazione e .... disegna la immagine.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Mhm, quindi tipo:
Codice PHP:
O mi sono confuso un poco? Ho l'impressione di si... EDIT: avevo dimenticato di chiamare il rotate.. XD
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Ehm ... beh .. sì, un tantino ...
Image non ha un rotate(), poi già solo quel cast a int di un String fa venire i brividi ... e quindi non è assolutamente l'approccio giusto. Questo è un esempio completo: Codice:
import java.awt.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.event.*;
public class ImageRotationTestFrame extends JFrame
{
private ImagePanel imagePanel;
private JSlider slider;
public ImageRotationTestFrame ()
{
super ("Image Rotation Test");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (400, 400);
try
{
Image img = ImageIO.read (new URL ("http://img158.imageshack.us/img158/8927/catum9.jpg"));
imagePanel = new ImagePanel (img);
slider = new JSlider (0, 360, 0);
getContentPane ().add (imagePanel, BorderLayout.CENTER);
getContentPane ().add (slider, BorderLayout.SOUTH);
slider.addChangeListener (new ChangeListener ()
{
public void stateChanged (ChangeEvent e)
{
imagePanel.setAngle (slider.getValue ());
}
});
}
catch (Exception e)
{
System.out.println (e);
}
}
public static void main (String[] args)
{
SwingUtilities.invokeLater (new Runnable ()
{
public void run ()
{
ImageRotationTestFrame f = new ImageRotationTestFrame ();
f.setVisible (true);
}
});
}
}
class ImagePanel extends JPanel
{
private Image img;
private double angle;
public ImagePanel (Image img)
{
this.img = img;
}
public void setAngle (double angle)
{
this.angle = Math.toRadians (angle);
repaint ();
}
public void paintComponent (Graphics g)
{
super.paintComponent (g);
Graphics2D g2d = (Graphics2D) g;
int panelWidth = getWidth ();
int panelHeight = getHeight ();
int imgWidth = img.getWidth (this);
int imgHeight = img.getHeight (this);
g2d.translate (panelWidth/2, panelHeight/2);
g2d.rotate (angle);
g2d.drawImage (img, -imgWidth/2, -imgHeight/2, this);
}
}
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Wow, avevo errato un poco. XD
Mhm, ok ti ringrazio! Vedo di adattarlo a ciò che mi serve!! GRAZIE!!!
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Se hai provato il mio esempio, avrai visto che con le varie angolazioni, a parte i bordi sgranati, pure l'interno della immagine stessa appare un po' sgranato.
Prima del drawImage basta impostare: g2d.setRenderingHint (RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); e si ottiene già una qualità decisamente superiore.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
Si vabbè, io tanto devo ruotare una gif di pochi pixel... XD
Una cosa tipo 80pix*80pix..... Per cui non mi serve sia perfetta.. ..Mhm.. Ora sto un po lavorandoci per integrarlo nel mio lavoro.. Comunque grazie mille per i suggerimenti!!
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
o.0 Sarò rimbambito???
Ecco il codice che ho fatto (anche con l'aiuto di netbeans XP)
Codice PHP:
Codice:
init:
deps-jar:
Compiling 2 source files to /*censured path*/HitThePlae/build/classes
/*censured path*/HitThePlae/src/hittheplane/GraphicX.java:108: cannot find symbol
symbol : method setAngle(int)
location: class javax.swing.JPanel
imagePanelRotate.setAngle (angleSlider.getValue ());
1 errors
BUILD FAILED (total time: 0 seconds)
Sarò stupido io????? EDIT: HO RISOLTO IL PROBLEMA DI Image ERA UN ERRORE STUPIDO....!! Ora mi manca l'altro problema... ç_ç/EDIT Cmq se vi interessa allego pure il file ".form" se volete sfruttarlo con matisse per capire... (anche se voi siete dei mezzi genii.. XD e vedete il codice come se fosse visuibile.. tipo codice matrix.. XD XD
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 Ultima modifica di jj.69kt : 03-06-2008 alle 12:38. Motivo: Risolto un problema su due! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
PELASEEEE!!
Ecco xke odio netbeans... Con il suo initComponents() inizializza tutte le variabli....
e se io ne volessi una per i cazzi mia???? GRRRR HEEELEPPP!!!! Qlk1 può aiutarmi per sopra??
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Guarda, basta che leggi con calma il messaggio del compilatore, di solito sono piuttosto chiari, per esempio nel caso del tuo post qui sopra:
Quote:
Infatti se vado a leggere nella classe ImagePanel trovo "solo" un metodo setAngle(double angle) che quindi accetta solo double. Una soluzione sarebbe castare a double, così: ((double) angleSlider.getValue()) Un'altra soluzione, per me più elegante, sarebbe definire in ImagePanel un altro metodo setAngle() che accetta double. Comunque ti consiglio di sforzarti a leggere e tentare di capire da solo i messaggi di errore di javac. Ciao
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
eh, mi ero accorto dell'int e del double.....
Il problema è che.. fatto il cast a double... Da ancora errore...... Creata una variabile di supporto che trafsorma l'int in double... errore.. usato un wrapper Integer che poi viene trasformato in double.... Ma nulla.. Sempre errore.... Non è il fatto che la funizone accetti un double... Pensavo anche io...... ç_ç EDIT Bello, se lo faccio girare sotto Eclipse mi da questo "errorino".. XD Codice:
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: org.jdesktop cannot be resolved to a type org.jdesktop cannot be resolved to a type org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved to a type org.jdesktop cannot be resolved to a type org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved to a type org.jdesktop cannot be resolved to a type org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved org.jdesktop cannot be resolved at GraphicX.initComponents(GraphicX.java:89) at GraphicX.<init>(GraphicX.java:24) at GraphicX$2.run(GraphicX.java:250) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:461) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) Spero di cavarci qlke cosa... ç_ç
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 Ultima modifica di jj.69kt : 03-06-2008 alle 14:23. |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Con tutta la buona volontà del mondo mi dici come possiamo aiutarti a risolvere il tuo problema avendo come unica fonte di informazione quello che scrivi nei tuoi post, se non ci scrivi il benedetto messaggio di errore? Posta le lamentele di javac che vediamo un po' dove sta l'inghippo
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Vabbè adesso anche il discorso Eclipse... li l'errore mi sembra dovuto al fatto che stai usando classi di librerie esterne e forse nella fretta non hai segnalato a Eclipse che in questo progetto stai usando la tale libreria il cui jar è sito in tal'altro posto nel tuo pc.
Però se posso permettermi, invece di agitarti e fare mille prove fermati un attimo e con calma risolviamo il problema. Torna sotto NetBeans, controlla il codice, compila e posta l'errore.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 03-06-2008 alle 14:32. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
Il problema lo spiega molto bene il messaggio di errore: /*censured path*/HitThePlae/src/hittheplane/GraphicX.java:108: cannot find symbol symbol : method setAngle(int) location: class javax.swing.JPanel imagePanelRotate.setAngle (angleSlider.getValue ()); Infatti la variabile di istanza è un JPanel private javax.swing.JPanel imagePanelRotate; Quindi è chiaro che sul reference imagePanelRotate non si può invocare un setAngle() perché JPanel non ce l'ha!!
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ciao Andbin,
anche io all'inizio avevo pensato a questo ma poi sono andato a controllare il codice che ha postato e, scusa l'ignoranza mia, perchè il compilatore lo vede come un JPanel? Lui da codice fa così: Quote:
Quote:
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#16 | ||
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
Quote:
Esempio: Object obj = new Date(); Object definisce toString() (quindi è noto ad Object) e la classe Date ne fa l'override, quindi posso invocare obj.toString() e verrà eseguita la implementazione di toString() di Date piuttosto che quella di Object. Se il reference è di tipo Object però non posso invocare ad esempio getTime(), perché Object non sa nulla di questo metodo. È della classe Date. Quindi, per ripetere, è il tipo del reference che determina quali sono i metodi invocabili. È invece l'oggetto realmente istanziato che determina la implementazione che verrà eseguita. Questa è una questione i-m-p-o-r-t-a-n-t-i-s-s-i-m-a, fondamentale in Java e in altri linguaggi ad oggetti. No.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
||
|
|
|
|
|
#17 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Sì Andbin, grazie della spiegazione ma ho fatto confusione perchè invece di accorgermi di questo:
Quote:
Quote:
Grazie comunque delle spiegazioni
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 677
|
AAH!! Ho capito quel'è il problema!!! Il fatto è che NetSchif non m permette di modificare il tipo... Cioè, io lo edito nel file con un semplice TextEdit poi appena lo apro in NB me lo "corregge"...... E di conseguenza non trova setAngle()...
Avete in mente una soluzione? (Nel frattempo io o provato un decina di sistemi.. ç_ç ma nulla... AH, Comunque mille graziie!!!! Siete gentilissimi, sto imparando molo piu su questo forum k a lezione..
__________________
Desktop: (In Vendita) iMac (12,2) 27" --> i5 QaudCore 2,7GHz, 8GB RAM, 1TB HDD.. Laptop (In Pensione): MacBook PRO (3,1) 15.4" (Glossy, ma pentito) --> 2.2Ghz, 4GB Ram.. Camera: Nikon D80 with Nikkor 18-55mm 1:3-5.6 GII + Nikkor 55-200mm 1:4-5.6 VR "Mobile": iPhone 5 64Gb MyEbay: 100%! • Mercatino (Green = Good; Red = Bad) UncleSam, Boxi80, Zuckerbaer, lamerone, danidj, maxmax80 |
|
|
|
|
|
#19 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Quote:
Ecco perchè! NetSchif come lo chiami tu ( ) non si usa così, è un IDE non un semplice editor di testo... mio dio!Guarda, se osi storpiare un'altra volta il nome del mio amato NetBeans io mi eclisso ad vitam dai tuoi thread ( )Senti, ho capito poco e male come lo usi in modo "ibrido" con il tuo editor di testo esterno: ma lavorare solo da dentro l'IDE no? Quale sarebbe il motivo che ti ha spinto a lavorare così? Comunque per aggiungere una, chiamiamola, "classe visuale" che estenda JPanel in modo che tu poi ci possa implementare quello che ti pare è sufficiente, da NetBeans, cliccare col tasto destro sopra il nome del package dentro cui vuoi aggiungere la classe, scegliere New... -> JPanel Form et voilà: ti compare una bella dialog, imposti il nome che vuoi dare alla tua classe e confermi con OK. Il gioco è fatto: in NetBeans ti ritrovi con 2 viste della classe: una è la vista fornita dall'editor del codice, l'altra la vista fornita dall'editor visuale di NetBeans, il buon Matisse, che ti permette di aggiungere/modificare componenti con un interfaccia WYSIWYG (What You See Is What You Get). Ora, nella vista dell'editor di codice della classe puoi fare quello che ti pare, l'unica cosa particolare è che ti troverai dei blocchi di codice "controllati" da NetBeans, e sono le parti di codice generate ET gestite completamente in automatico da Matisse sulla base delle informazioni contenute nell'editor grafico! Tu su quello devi agire per modificare la parte grafica. Inoltre è sempre possibile customizzare praticamente tutto quello che Matisse ha fatto anche se non puoi cambiare di una virgola il codice che genera/gestisce lui in automatico: il trucco è aggiungere del tuo codice, fuori dai blocchi gestiti da Matisse, per maniopolare le stesse variabili create dall'editor. In nessun caso puoi aspettarti di modificare (tramite un editor esterno) il codice gestito da Matisse, salvare il file .java e riaprilo in NetBeans sperando che le modifiche così apportate siano mantenute. Questo perchè quando NetBeans crea una "classe visuale" (cioè con la vista sia del codice sorgente che delle componenti grafiche) viene generato sì un file .java, ma viene anche associato un corrispondente file .form che in pratica gestisce la parte riguardante i setting grafici dei componenti così come specificato in Matisse e li salva: sono questi dati che vengono consultati per rigenerare la parte di codice "guarded" nel corrispettivo file .java
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Sì una soluzione c'è .... ma devo dirla in modo un po' brusco: evita come la peste di farti generare il codice dal tuo ambiente di sviluppo. Il codice è bene scriverlo tutto a mano, compresa tutta la parte relativa alla creazione della interfaccia utente.
Personalmente sono contrario al software che ti scrive il codice mentre invece sostengo che sia fondamentale conoscere bene (e ripeto *bene*) i componenti e i layout manager AWT/Swing se si vogliono realizzare delle applicazioni serie.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:23.












) non si usa così, è un IDE non un semplice editor di testo... mio dio!
)








