Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-10-2004, 16: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, 18: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, 10: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, 12: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, 12: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, 14: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, 14: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, 16: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, 15: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, 17: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, 19: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, 21: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, 20: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, 20: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 24-10-2004, 00: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, 17: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, 19: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 26-10-2004, 00: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, 11: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, 13: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


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
La NASA ha discusso le problematiche del...
Il razzo spaziale NASA SLS e la capsula ...
Stazione Spaziale Internazionale: Crew-1...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
L'uso dell'IA nei giochi è cancer...
Meta punta sul nucleare USA per alimenta...
Le migliori offerte Amazon del weekend: ...
La crisi dell'hardware spinge i negozi g...
Apple Watch SE 3 scontato su Amazon: il ...
Robot aspirapolvere davvero scontati: si...
DDR5 troppo cara: il passato di AMD potr...
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: 22:19.


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