PDA

View Full Version : [JAVA]Disperato, disperatissimo, java...


V3ntuR4tz
02-07-2005, 15:06
Ciao a tutti... sono sull'orlo di una crisi di nervi...
devo consegnare una prova di progetto java entro lunedi',
ho provato di tutto ma per vari motivi la mia preparazione
non e' ancora sufficiente... e non riesco a venire a capo della
situazione... vi prego aiutatemi..... :cry: :cry: :cry:

In sostanza il progetto prevede la "generazione" di una tabella
nella quale compaiono scritte e immagini. E fin qui tutto bene.
Il problema e' che dovrei far si' che il contenuto della tabella,
e quindi il numero di righe e di colonne, vari in base alla dimensione della finestra !!! Ve lo giuro ho provato di tutto ma non ce la fo' !!!

Allego il link al file .zip dove c'e' il file (FinestraZodia.java) che
mi sta facendo impazzire... non e' che qualcuno puo' darmi
due dritte ?!? Ho tempo fino a lunedi'.... :cry: :cry: :cry:


http://www.webalice.it/gioriv/progetto.zip

V3ntuR4tz
02-07-2005, 15:25
E' una tragedia vi prego qualcuno mi aiuti......

V3ntuR4tz
02-07-2005, 15:52
se puo' aiutare....



import javax.swing.JPanel ;
import javax.swing.JFrame ;
import java.awt.Graphics ;

import java.awt.Image ;

import zodiaco.* ;


/** Questa riga inizia la definizione di una niova classe
*/
public class FinestraZodia extends JPanel {


Zodia zodiaco = new Zodia() ;

/** Inizializza il pannello che poi sarà inserito nella finestra.
*/
public FinestraZodia() {


Segno Aries = new Ariete("Aries", "img/ariete.jpg") ;
Segno Taurus = new Toro("Taurus", "img/toro.jpg") ;
Segno Gemini = new Gemelli("Gemini", "img/gemelli.jpg") ;
Segno Cancer = new Cancro("Cancer", "img/cancro.jpg") ;
Segno Leo = new Leone("Leo", "img/leone.jpg") ;
Segno Virgo = new Vergine("Virgo", "img/vergine.jpg") ;
Segno Libra = new Bilancia("Libra", "img/bilancia.jpg") ;
Segno Scorpius = new Scorpione("Scorpius", "img/scorpione.jpg") ;
Segno Sagittarius = new Sagittario("Sagittarius", "img/sagittario.jpg") ;
Segno Capricornus = new Capricorno("Capricornus", "img/capricorno.jpg") ;
Segno Acquarius = new Acquario("Acquarius", "img/acquario.jpg") ;
Segno Pesces = new Pesci("Pesces", "img/pesci.jpg") ;


zodiaco.aggiungiSegno(Aries) ;
zodiaco.aggiungiSegno(Taurus) ;
zodiaco.aggiungiSegno(Gemini) ;
zodiaco.aggiungiSegno(Cancer) ;
zodiaco.aggiungiSegno(Leo) ;
zodiaco.aggiungiSegno(Virgo) ;
zodiaco.aggiungiSegno(Libra) ;
zodiaco.aggiungiSegno(Scorpius) ;
zodiaco.aggiungiSegno(Sagittarius) ;
zodiaco.aggiungiSegno(Capricornus) ;
zodiaco.aggiungiSegno(Acquarius) ;
zodiaco.aggiungiSegno(Pesces) ;


}


/** Metodo ereditato dalla classe JPanel serve per aggiornare il pannello.
*/
public void paint(Graphics g) {

// stampa le informazioni di testo dello zodiaco.
Segno[] segni = zodiaco.elencoAnimali() ;
System.out.println("Ci sono "+segni.length+" segni:") ;
for(int i=0 ; i<segni.length ; i++) {
Segno a = segni[i] ;
System.out.println(a.dimmiNome()+", "+a.categoria()+", dice "+a.faiPredizione()) ;
}


// dati per visualizzazione delle img nella finestra

// il numero di ammagini per ogni riga
int numero_colonne = 3 ;
// larghezza forzata per le immagini
int larghezza_immagini = 100 ;
// altezza fortzata per le immagini
int altezza_immagini = 100 ;
// spazio verticale tra due immagini dove stampare il testo
int spazio_testo = 40 ;

// colonna corrente
int colonna = 100 ;
// posizione x iniziale
int start_x = 10 ;
// posizione attuale per stampare un'immagine
int x=start_x, y=spazio_testo ;

// per ogni segno faccio stampare l'img e la predizione
for(int i=0 ; i<segni.length ; i++) {
Segno a = segni[i] ;

g.drawString(a.dimmiNome()+": "+a.faiPredizione(), x, y) ;

// se non c'e' la foto, stampa un testo di default.
Image im = a.immagine() ;
if(im!=null) {
g.drawImage(im, x, y, larghezza_immagini, altezza_immagini, this) ;
} else {
g.drawString("Foto N/A", x, y+spazio_testo) ;
}


// avanza di una colonna
colonna++ ;
// se ho ragguinto il massimo delle colonne, riparto a disegbare da sinistra
if(colonna >= numero_colonne) {
x = start_x ;
y += altezza_immagini + spazio_testo ;
colonna = 0 ;
} else {
// altrimenti vado verso destra
x += 150 + larghezza_immagini ;
}


}

}


/** Metodo main che istanzia un pannello e lo inserisce in una finestra.
*/
public static void main(String[] args) {
JFrame frame = new JFrame("Graphic output");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.getContentPane().add(new FinestraZodia());
frame.setVisible(true);
}

}

franksisca
02-07-2005, 16:15
SCusa, ma devi allargare o scorrere la finestra?

anx721
02-07-2005, 22:52
Ma il requisito di mostrare tante immagini in base alla dimensione della finestra è un requisito del progetto?

perche altrimenti puoi risolvere semplicemente utilizzando un JScrollPane che ti permette di scorrere il contenuto della finestra in modo da visualizzare le parti nascoste

franksisca
03-07-2005, 09:36
Ecco, intendevo dire anche io la stessa cosa.
Se usi un JScrollPane credo che diventi ttto più semplice.

V3ntuR4tz
03-07-2005, 10:54
Ecco si' penso che potrebbe andare bene !

Come posso implementare jscrollpane ?


PS: vi ricordo che di java non ne capisco una benemerita :D
Nel file FinestraZodia.java dove devo mettere jscrollpane ?

Mi fate un esempio ? vi preeeeeego :mc: :mc:

Alvaro Vitali
03-07-2005, 11:00
Dove crei la JTable:

myJScrollPane = new JScrollPane(myJTable);

nella parte di programma dove aggiungevi ad un container la myJTable ora ggiungerai l'oggetto myJScrollPane naturalmente...

vorrei cmq esortare tutti ad usare la documentazione Java così ben fatta!
Se avessi raccolto il consiglio di usare una JScrollPane e fossi andato a consultare la documentazione avresti già fatto... ;)

V3ntuR4tz
03-07-2005, 12:04
Non ce la posso fare... :( :(

V3ntuR4tz
03-07-2005, 12:16
In piu' non riesco neanche a mettere la applet in un file html... non mi apre
l'applet... sara' che io nel file html gli ho inserito solo un file .class mentre
ce ne sono tanti altri ?
Nell'html dovrei specificare tutti i file .class o solo quello di
visualizzazione ? (FinestraZodia.class)

Mi scuso con tutti gli utenti e i moderatori per l'ESTREMA SFRONTATEZZA
con la quale sto ponendo queste domande, ma la disperazione e' massima...

Seguo il forum da tanti anni, e non lo avevo mai "imbrattato" cosi'...
chiedo venia, veramente... :cry: :cry: :cry:


PS: e grazie di cuore a chi ha risposto fin'ora :cry:

V3ntuR4tz
03-07-2005, 13:04
Se io tramite prompt dei comandi scrivo:

per compilare:

javac FinestraZodia.java

viene generato il file class.

Dopo di che scrivo: java FinestraZodia

e tutto funziona.

Quando pero' nel file html metto il tag <APPLET> e gli indico
il file .class FinestraZodia.class

mi dice che non riesce a caricare l'applet... qualche consiglio ?

V3ntuR4tz
03-07-2005, 13:20
:cry: :cry: :cry: :help: :help: :help:

anx721
03-07-2005, 14:55
Ma per forza devi usare un'applet? IO non ne ho mai fatta una quindi non so aiutarti...

Con lo JScrollPane hai risolto o no?

Alvaro Vitali
03-07-2005, 14:57
Proviamo qualche soluzione:

- La classe principale estende la classe JApplet ??

- Hai inserito l'applet usando i giusti tag?

<html>
<head>
<title>titolo</title>
</head>
<body>
<APPLET CODE="nomeClassePrincipale.class" height="x" width="y">
Questo programma richiede un browser abilitato per Java
</APPLET>
</body>
</html>

V3ntuR4tz
03-07-2005, 21:11
Sono commosso, grazie mille a tutti per le risposte.

Dunque ribadisco che ne capisco molto poco di java...

pero' quanto dice alvaro mi fa venire un dubbio effettivamente...

Il listato che ho postato un po' sopra mostra l'intero contenuto del
file .class (o meglio la sua versione .java) che mi interessa
integrare come applet nel file html... secondo voi in quel listato
manca qualcosa ?
O meglio manca, come dice alvaro, il comando che :

"fa estendere la classe Japplet alla classe principale" ???

E se manca, cosa diavolo dovrei inserire ?

La scadenza e' stata posticipata a martedi', quindi ho ancora domani
per lavorarci su'... vi prego aiutatemi... so che chiedo molto...
vorrei poter fare qualcosa per ricambiare.... :( :( :(

anx721
03-07-2005, 21:20
Io ho letto il tuo codice e no mipare che tua bbia implementato un'applet ma solo un'applicazione da avviare col comando

java FinestraZodia

V3ntuR4tz
03-07-2005, 21:35
Io ho letto il tuo codice e no mipare che tua bbia implementato un'applet ma solo un'applicazione da avviare col comando

java FinestraZodia


Ah ecco ! Grande ecco dove sta l'inghippo !

Come potrei fare quindi ?

anx721
03-07-2005, 21:38
Come ti ho detto no mi sono mai occupato diapplet,prova a trovare qualke guida o tutorial online

V3ntuR4tz
03-07-2005, 22:41
Ci provo.... nel mentre qualcuno se sa' qualcosa.....

Alvaro Vitali
03-07-2005, 23:29
Premetto che anche io non ho mai realizzato applet cmq ho letto che:

La classe principale di un Applet Java deve estendere la classe javax.swing.JApplet

per far questo la tua classe (mi pare che tu ne abbia una sola) deve essere dichiarata così:

public class FinestraZodia extends javax.swing.JApplet { etc...etc... }

il problema è che la tua classe estende già la classe JPanel e Java non permette l'ereditarietà multipla.
Quindi una soluzione (forse) sarebbe creare una classe Principale che estende JApplet e che poi nel suo metodo di inizializzazione crea un oggetto della classe FinestraZodia.
Il metodo di inizializzazione è init() e viene invocato in fase di caricamento dell'applet e tu devi ridefinirlo nella tua classe Principale.
Forse dentro init() potresti metterci ciò che era nel tuo "main".

Riassumendo dovresti provare questo:


public class Principale extends javax.swing.JApplet {

public void init() {

JFrame frame = new JFrame("Graphic output");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.getContentPane().add(new FinestraZodia());
frame.setVisible(true);


}

}

(ovviamnete mancano tutti gli "import" del caso...)
spero di esserti stato di aiuto...

V3ntuR4tz
03-07-2005, 23:38
Premetto che anche io non ho mai realizzato applet cmq ho letto che:

La classe principale di un Applet Java deve estendere la classe javax.swing.JApplet

per far questo la tua classe (mi pare che tu ne abbia una sola) deve essere dichiarata così:

public class FinestraZodia extends javax.swing.JApplet { etc...etc... }

il problema è che la tua classe estende già la classe JPanel e Java non permette l'ereditarietà multipla.
Quindi una soluzione (forse) sarebbe creare una classe Principale che estende JApplet e che poi nel suo metodo di inizializzazione crea un oggetto della classe FinestraZodia.
Il metodo di inizializzazione è init() e viene invocato in fase di caricamento dell'applet e tu devi ridefinirlo nella tua classe Principale.
Forse dentro init() potresti metterci ciò che era nel tuo "main".

Riassumendo dovresti provare questo:


public class Principale extends javax.swing.JApplet {

public void init() {

JFrame frame = new JFrame("Graphic output");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.getContentPane().add(new FinestraZodia());
frame.setVisible(true);


}

}

(ovviamnete mancano tutti gli "import" del caso...)
spero di esserti stato di aiuto...



Provo immediatamente ! Nel mentre....

GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE
GRAZIE

V3ntuR4tz
03-07-2005, 23:48
Dunque ho creato Principale.java (e poi il .class) cosi':


import javax.swing.JApplet;
import javax.swing.JPanel ;
import javax.swing.JFrame ;
import java.awt.Graphics ;
import zodiaco.* ;


public class Principale extends javax.swing.JApplet {

public void init() {

JFrame frame = new JFrame("Graphic output");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.getContentPane().add(new FinestraZodia());
frame.setVisible(true);


}

}




Ora pero' il browser (ovviamente l'html e' stato modificato per indicare
il file Principale.class nel tag APPLET) mi dice questo:

java.security.accesscontrolexception: accessdenied

(nella barra di stato in basso)

e ovviamente non visualizza nulla.... :mc: :mc: :mc:

Aiuto aiuto aiuto.... mi sta venendo super panico

anx721
04-07-2005, 00:02
ma se hai un'apllet penso che non dovresti usare il jframe per l'interfaccia, ma l'applet stessa.

inoltre mi pare che le applet non possano accedere al file system, probabilmente devi abilitare ciò per non avere problemi di sicurezza

anx721
04-07-2005, 00:12
http://java.sun.com/docs/books/tutorial/applet/index.html

http://java.sun.com/docs/books/tutorial/uiswing/components/applet.html