Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-10-2004, 15:20   #1
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
[JAVA] Utilizzo delle scrollbar - Swing

Ciao qualcuno sa dirmi come posso realizzare le scrollbar con java?
Sto realizzando una applicazione che crea e visualizza un grafo in una finestra ma il grafo è troppo grande...
Qui di seguito riporto la parte del codice errato della mia applicazione, mi dite dov'è l'errore?

...
JFrame finestraGrafo = new JFrame("Grafo parziale"); //Questo crea il JFrame in cui voglio sia visualizzato un grafo.
Canvas area =new grafico(nodi,matriceGrafo); //Questo disegna il grafo mediante la classe grafico che estende Canvas
JScrollPane scroll= new JScrollPane(area); //Qui creo le scrollbar e le applico al grafo.
scroll.setPreferredSize(new Dimension(300, 250)); //Qui definisco una dimensione (giusto per provare a vedere le scrollbar)
finestraGrafo.setContentPane(scroll); //Ed inserisco le scrollbar all'interno del JFrame
finestraGrafo.pack();
finestraGrafo.setVisible(true);
...

class grafico extends Canvas{ //Così ho definito la classe grafico che estende Canvas
...
public grafico(Vector v,boolean m[][]){ //Il costruttore prende il vettore dei nodi e la matrice di incidenza e con il metodo paint disegna.
...

Datemi una mano per favore è da due giorni che non riesco ad andare avanti,il grafo viene disegnato correttamente...ma nienete scrollbar!
Grazie a tutti!
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2004, 17:14   #2
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Penso che dovresti impostare la dimensione del componente che inserisci nel JScrollPane; ad esempio quando disegni il grafo dovresti impostare la dimensione del Canvas in base al disegno effettuato; se tale dimensione sarà minore dello spazio visualizzato dal JScrollPane allora le barre appariranno.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2004, 09:32   #3
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Ho impostato le dimensioni del canvas ma non va ancora, adesso le scrollbar restano ai lati del canvas e non ai lati del jframe.
Ad esempio appena apro l'applicazione la dimensione della finestra è troppo piccola ma non si vedono le scrollbar, se allargo la finestra orizzontalmente oltre la dimensione del canvas compare la scrollbar verticale scorrendo giu tramite la scrollbar verticale fino ai limiti del canvas si trova la scrollbar orizzontale!
Altri suggerimenti?
Grazie!
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2004, 11:12   #4
pholcus
Member
 
Iscritto dal: Oct 2002
Messaggi: 293
Al posto di JScrollPane metti ScrollPane
pholcus è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2004, 11:59   #5
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Comunque non è una buona pratica mischiare componenti swing e componenti awt, ti consiglio di usare solo swing
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2004, 13:24   #6
pholcus
Member
 
Iscritto dal: Oct 2002
Messaggi: 293
E' proprio per quello che nn funziona il programma..

JScrollPane e' swing, ScrollPane e' awt... poi magari si puo risolvere in qualche altro modo, magari con dei casting..
Ma e' sempre meglio nn mischiare awt e swing..


Ciao ;9
pholcus è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2004, 13:41   #7
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Bhe, ma visto ceh gli altri componenti sono tutti swing, io direi di utilizzare un JPanel al posto del canvas
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2004, 15:40   #8
pasquyn
Registered User
 
Iscritto dal: Oct 2004
Città: torrevecchia pia
Messaggi: 14
finestraGrafo.setContentPane(scroll);

Forse sbagli proprio qui... Prova cambiando questa riga in questo modo:

finestraGrafo.getContentPane().add(scroll,BorderLayout.CENTER);

Penso che non devi modificare il ContentPane ma devi aggiungere ad esso l'oggetto JScrollPane che al suo interno ha l'oggetto area.

Cosi dovrebbe funzionare... prova
pasquyn è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2004, 14:43   #9
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Funziona!!! Grazie mille, il problema delle scrollbar è risolto. Però ho delle altre domande!
1)Siccome non è una buona cosa mischiare swing e awt esistono dei metodi swing che sostituiscono MouseListener e MouseMotionListener(che si trovano in java.awt.event.*) ? Lo stesso vale per i metodi che disegnano ellissi rettangoli ecc.(che si trovano in java.awt.geom.*)
2)Non riesco a settare lo sfondo dell'oggetto che estende JPanel. Ho provato ad inserire la riga "this.setBackground(Color.white);" nel suo costruttore, il programma viene compilato correttamente ma lo sfondo rimane grigio.
3)A volte quando effettuo lo scroll con le scrollbar o quando un altra finestra si sovrappone al JPanel contenente il grafo, il contenuto della finestra si rovina (si risistema solo quando ridimensiono la finestra)come posso fare per evitarlo?
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2004, 16:16   #10
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
I mouse listener puoi usarli benissimo, sono i componenti grafici che non andrebbero miskiati. Per disegnare stai usando un JPanel o ancora il canvas? Il problema della finestra sporcata dovrebbe essere automaticamente gestito da java, almeno se effettui il disegno col il metodo paintComponent che java chiama automaticamente quando c'è da ridisegnare il contentuo di un componente, almeno io nn ho problemi di questo tipo
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2004, 18:35   #11
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Sto utilizzando JPanel ma il metodo che uso è paint(),devo usare paintComponent al posto di paint?
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2004, 20:54   #12
pasquyn
Registered User
 
Iscritto dal: Oct 2004
Città: torrevecchia pia
Messaggi: 14
Ma stai facendo l'esame di Ingegneria del Software?
Si devi usare paintComponent, come diceva anx721 Java richiama in automatico questo metodo quando si tratta di ridisegnare un interfaccia.

ti riporto un esempio di una classe che estende JPanel e modifica il colore di sfondo.
Anche se qui sono un po rozzo nel fare la cosa.
Io l'avevo fatta cosi perchè dovevo fare uno sfondo sfumato... prendi spunto da qui:

import java.awt.*;
import javax.swing.*;

import com.borland.jbcl.layout.*;

public class Panel extends javax.swing.JPanel {

public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
g2.setPaint (new java.awt.GradientPaint(0,0,new Color(4, 64, 151),0,getSize().height,new Color(66, 129, 191)));
g2.fillRect(0, 0, size().width, size().height);
g2.setPaint(new Color(237, 109, 70));
g2.drawLine(0,(int)size().getHeight()-1,(int)size().getWidth(),(int)size().getHeight()-1);
g2.drawLine(0,0,(int)size().getWidth(),0);
}

public Panel(XYLayout xYLayout) {
super(xYLayout);
}

public Panel() {
}

}
pasquyn è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2004, 19:01   #13
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
No, si tratta del progetto di "reti di calcolatori" ho provato a sostituire paintComponent al posto di paint ma non va lo stesso, inoltre non riesco ad "attivare" il colore di background del JPanel.
Altri suggerimenti?
Grazie!

ps:
Queste a cosa servono?

public Panel(XYLayout xYLayout) {
super(xYLayout);
}

public Panel() {
}
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2004, 19:15   #14
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
bada che devi usare il metodo

public void paintComponent(Graphics g)

che versione di java usi? (java -version)
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2004, 23:54   #15
pasquyn
Registered User
 
Iscritto dal: Oct 2004
Città: torrevecchia pia
Messaggi: 14
Io ora sto facendo reti di calcolatori, di quale università sei?
Non ricordo che versione di java ho usato mi pare 1.4, ma ora so che uscita la 1.5 e c'è di tutto li miliardi di cose nuove.

public Panel(XYLayout xYLayout) {
super(xYLayout);
}

Questo è l'estensione di un costruttore della classe, che semplicemente richiama il costruttore della classe estesa e gli passa il layout, a me serviva per settare come layout il borderlayout mi pare, ora non ricordo e un prog vecchio che ho fatto.

L'altro e un costruttore di semplice.

Cmq tu questo devi fare:

public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
g2.setPaint (new java.awt.GradientPaint(0,0,new Color(4, 64, 151),0,getSize().height,new Color(66, 129, 191)));
g2.fillRect(0, 0, size().width, size().height);
g2.setPaint(new Color(237, 109, 70));
g2.drawLine(0,(int)size().getHeight()-1,(int)size().getWidth(),(int)size().getHeight()-1);
g2.drawLine(0,0,(int)size().getWidth(),0);
}
pasquyn è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2004, 16:31   #16
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Studio a Roma, sto facendo anche il progetto di "ingegneria del software" in quello sono bloccato perchè il maledetto Tomcat 5.0 non vuole partire sul mio PC (e perchè non so come si realizzano le sessioni all'interno delle JSP)!

Tornando al problema delle scrollbar, scrivo la parte del codice, magari qualcuno di voi guardandola riesce a capire dov'è l'errore, grazie in ogni caso per l'aiuto che mi avete dato fin qui!

import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

...

class grafo extends Thread{
...
private void disegnaGrafo(){
JFrame finestraGrafo = new JFrame("Grafo parziale");
JPanel area =new grafico(nodi,matriceGrafo);
JScrollPane scroll = new JScrollPane(area);
scroll.getViewport().setPreferredSize(new Dimension(640,480));
scroll.getViewport().setBackground(Color.white);
finestraGrafo.getContentPane().add(scroll, BorderLayout.CENTER);
finestraGrafo.pack();
finestraGrafo.setVisible(true);
}
}

class grafico extends JPanel implements MouseListener,MouseMotionListener{
public grafico(Vector v,boolean m[][]){
this.setBackground(Color.white); //Perchè non funziona?
this.setForeground(fg);
setVisible(true);
enum=vettoreNodi.elements();
this.setPreferredSize(new Dimension(DX,DY));
}

public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
for (i=0;i<vettoreNodi.size();i++){
for(j=i;j<vettoreNodi.size();j++){
if (matrice[i][j]||matrice[j][i]){
n1=(nodo)vettoreNodi.get(i);
x1=(n1.getX()*Xgrid)+XBordo+(diametroNodi/2);
y1=(n1.getY()*Ygrid)+YBordo+(diametroNodi/2);
n2=(nodo)vettoreNodi.get(j);
x2=(n2.getX()*Xgrid)+XBordo+(diametroNodi/2);
y2=(n2.getY()*Ygrid)+YBordo+(diametroNodi/2);
if (x1!=x2)
g2.draw(new Line2D.Double(x1,y1,x2,y2));
else{
QuadCurve2D.Double curva = new QuadCurve2D.Double();
curva.setCurve(x1,y1,x1+(0.75*Xgrid),(y1+y2)/2,x2,y2);
g2.draw(curva);
}
}
}
}
enum=vettoreNodi.elements();
while (enum.hasMoreElements()) {
n=(nodo)enum.nextElement();
g2.setStroke(contorno);
if (n.getStato().equals("Ok")){
g2.setPaint(Color.green);
g2.fill(new Ellipse2D.Double(((n.getX())*Xgrid)+XBordo, ((n.getY())*Ygrid)+YBordo, diametroNodi, diametroNodi));
g2.setPaint(Color.black);
g2.draw(new Ellipse2D.Double(((n.getX())*Xgrid)+XBordo, ((n.getY())*Ygrid)+YBordo, diametroNodi, diametroNodi));
}else{
g2.setPaint(Color.red);
g2.fill(new Ellipse2D.Double(((n.getX())*Xgrid)+XBordo, ((n.getY())*Ygrid)+YBordo, diametroNodi, diametroNodi));
g2.setPaint(Color.black);
g2.draw(new Ellipse2D.Double(((n.getX())*Xgrid)+XBordo, ((n.getY())*Ygrid)+YBordo, diametroNodi, diametroNodi));
}
}
}
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2004, 18:39   #17
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
this.setPreferredSize(new Dimension(DX,DY));


DX e DY sono sono corretti? Come li imposti?
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2004, 23:47   #18
pasquyn
Registered User
 
Iscritto dal: Oct 2004
Città: torrevecchia pia
Messaggi: 14
Ma il problema è sempre che non ti fa navigare dentro la finestra?
pasquyn è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2004, 10:31   #19
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Quote:
Originariamente inviato da anx721
this.setPreferredSize(new Dimension(DX,DY));


DX e DY sono sono corretti? Come li imposti?
Vedo quanto è grande il grafo (scegliendo la posizione Y del nodo più in basso, quella X del nodo più a destra).

Comunque la dimensione è corretta, le scrollbar funzionano, il problema è che quando le uso il grafo nella finestra si "sporca" (è come se le scrollbar ridisegnassero il grafo su quello già presente nella finestra senza prima cancellare il vecchio contenuto della stessa), se provo a ridimensionare anche di un millimetro la finestra tutto si vede correttamente.
E poi non riesco a settare il colore di sfondo. Nel costruttore del JPanel che uso per disegnare il grafo ho messo la linea "this.setBackground(Color.white);" ma questa non ha effetto perchè lo sfondo del grafo rimane grigio.
Player1 è offline   Rispondi citando il messaggio o parte di esso
Old 04-11-2004, 12:30   #20
Player1
Senior Member
 
Iscritto dal: Feb 2002
Messaggi: 1370
Ragazzi finalmente ho risolto!
Ho semplicemente esteso la classe JComponent al posto della classe JPanel e tutto funziona correttamente!
Grazie a tutti! Ciao!
Player1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Idrogeno, nuova cella a combustibile rag...
Con la NASA fuori dai giochi, l'ESA risc...
Una falla di ChatGPT permette di estrapo...
Piano clima, 1,34 miliardi per il bonus ...
Porsche esce definitvamente da Bugatti R...
NVIDIA App aggiunge una delle funzioni p...
Come sarebbe il mondo se la luce viaggia...
Titanio, ceramica e zaffiro per HUAWEI W...
Taglio delle accise sul gasolio prorogat...
Universal e ElevenLabs: una piattaforma ...
Astra mette in crisi i server di OpenAI:...
Phanteks EX5: disponibile il case a bloc...
Broadcom rimuove l'accesso a uno strumen...
Italo porta Starlink sui treni ad Alta V...
Le GPU costano sempre di più, ma ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:21.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v