Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-12-2003, 14:50   #1
Bouba_Diop
Senior Member
 
Iscritto dal: Jun 2003
Città: Torino
Messaggi: 319
Java Swing

Ciao a tutti

Ho provato e riprovato a creare una semplice interfaccia con la classe swing, ma non riesco a fare ciò che voglio.
In poche parole, vorrei creare una finestra come quella del disegno allegato.
Vorrei dunque creare un frame con dei pulsanti posti sulla sinistra.
Io sono riuscito a crearmi il frame e i pulsanti, però i pulsanti occupano tutto il frame.

ecco il mio programma:


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Object;


public class Pannello{


public static void main(String[] args) {


JButton b1 = new JButton("Primo");
JButton b2 = new JButton("Secondo");
JButton b3 = new JButton("Terzo");
JButton b4 = new JButton("Quarto");
JButton b5 = new JButton("Quinto");

JFrame f = new JFrame("dd");

f.getContentPane().setLayout(new GridLayout(5,1));

//f.getContentPane().setLayout(new FlowLayout());

f.getContentPane().add(b1);
f.getContentPane().add(b2);
f.getContentPane().add(b3);
f.getContentPane().add(b4);
f.getContentPane().add(b5);

f.pack();
f.setVisible(true);

}


}


Grazie mille

ciao
Immagini allegate
File Type: png image1.png (598 Bytes, 23 visite)
Bouba_Diop è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2003, 16:50   #2
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
dipende dal layout che imposti

non sono molto pratico perché evito di usare la grafica il più possibile, comunque mi pare che usando FlowLayout i pulsanti occupino lo spazio in base alla lunghezza della loro etichetta.

altrimenti devi scegliere il layout "libero" e impostare le dimensioni a mano, magari aiutandoti con un editor che faccia il lavoro sporco
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2003, 17:03   #3
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Realizzare GUI con le swing non è cosa semplicissima...ma con un minimo di impegno puoi avere ottime soddisfazioni...lascia stare i tool grafici tipo quello di jbuilder, non imparerai mai! Leggiti: lo Swing tutorial
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2003, 20:11   #4
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Per generare layout completamente personalizzati occorre passare per gli oggetti GridBagLayout e GridBagConstraints. Non sono cose trascendentali, ma è necessario spenderci qualche tempo per fare un po' di prove, dopodichè la faccenda diventa più maneggevole.

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

public class Application extends JFrame {
  public static void main(String[] a) {
    new Application();
  }
  
  public Application() {
    JButton button1=new JButton("bottone 1");
    JButton button2=new JButton("bottone 2");
    JButton button3=new JButton("bottone 3");
    JButton button4=new JButton("bottone 4");
    JButton button5=new JButton("bottone 5");
    
    GridBagLayout layout=new GridBagLayout();
    GridBagConstraints constraints=new GridBagConstraints();
    constraints.anchor=GridBagConstraints.WEST;
    
    
    //BOTTONE 1
    constraints.gridx=0; //indice X della cella
    constraints.gridy=0; //indice Y della cella
    constraints.gridwidth=1; //numero di celle occupate sull'asse X
    constraints.gridheight=1; //numero di celle occupate sull'asse Y
    constraints.weightx=50; //dimensione proporzionale di spazio occupato sull'asse X
    constraints.weighty=0; //dimensione proporzionale di spazio occupato sull'asse Y        
    constraints.insets.top=25;
    constraints.insets.left=15;
    layout.setConstraints(button1, constraints);
    
    //BOTTONE 2
    constraints.gridx=0; //indice X della cella
    constraints.gridy=1; //indice Y della cella
    constraints.gridwidth=1; //numero di celle occupate sull'asse X
    constraints.gridheight=1; //numero di celle occupate sull'asse Y
    constraints.weightx=0; //dimensione proporzionale di spazio occupato sull'asse X
    constraints.weighty=0; //dimensione proporzionale di spazio occupato sull'asse Y
    
    constraints.insets.top=5;
    layout.setConstraints(button2, constraints);
    
    //BOTTONE 3
    constraints.gridx=0; //indice X della cella
    constraints.gridy=2; //indice Y della cella
    constraints.gridwidth=1; //numero di celle occupate sull'asse X
    constraints.gridheight=1; //numero di celle occupate sull'asse Y
    constraints.weightx=0; //dimensione proporzionale di spazio occupato sull'asse X
    constraints.weighty=0; //dimensione proporzionale di spazio occupato sull'asse Y
    
    layout.setConstraints(button3, constraints);
    
    //BOTTONE 4
    constraints.gridx=0; //indice X della cella
    constraints.gridy=3; //indice Y della cella
    constraints.gridwidth=1; //numero di celle occupate sull'asse X
    constraints.gridheight=1; //numero di celle occupate sull'asse Y
    constraints.weightx=0; //dimensione proporzionale di spazio occupato sull'asse X
    constraints.weighty=0; //dimensione proporzionale di spazio occupato sull'asse Y
    
    layout.setConstraints(button4, constraints);
    
    //BOTTONE 5
    constraints.gridx=0; //indice X della cella
    constraints.gridy=4; //indice Y della cella
    constraints.gridwidth=1; //numero di celle occupate sull'asse X
    constraints.gridheight=1; //numero di celle occupate sull'asse Y
    constraints.weightx=0; //dimensione proporzionale di spazio occupato sull'asse X
    constraints.weighty=0; //dimensione proporzionale di spazio occupato sull'asse Y
    
    layout.setConstraints(button5, constraints);
    
    //A DESTRA
    constraints.gridx=1; //indice X della cella
    constraints.gridy=0; //indice Y della cella
    constraints.gridwidth=1; //numero di celle occupate sull'asse X
    constraints.gridheight=6; //numero di celle occupate sull'asse Y
    constraints.weightx=50; //dimensione proporzionale di spazio occupato sull'asse X
    constraints.weighty=25; //dimensione proporzionale di spazio occupato sull'asse Y
    
    JComponent rightGlue=new JComponent() {};
    constraints.fill=GridBagConstraints.BOTH;
    layout.setConstraints(rightGlue, constraints);
    
    //IN BASSO    
    constraints.gridx=0; //indice X della cella
    constraints.gridy=5; //indice Y della cella
    constraints.gridwidth=1; //numero di celle occupate sull'asse X
    constraints.gridheight=1; //numero di celle occupate sull'asse Y
    constraints.weightx=50; //dimensione proporzionale di spazio occupato sull'asse X
    constraints.weighty=75; //dimensione proporzionale di spazio occupato sull'asse Y
    
    JComponent lowerGlue=new JComponent() {};
    constraints.fill=GridBagConstraints.BOTH;    
    layout.setConstraints(lowerGlue, constraints);
    
    getContentPane().setLayout(layout);
    getContentPane().add(button1);
    getContentPane().add(button2);
    getContentPane().add(button3);
    getContentPane().add(button4);
    getContentPane().add(button5);
    getContentPane().add(rightGlue);
    getContentPane().add(lowerGlue);
    
    setSize(350, 350);
    
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setTitle("Griglia");
    show();
  }
}
Nonostante sembri lungo e tedioso, il codice che ti ho postato (e che riproduce l'immagine da te inserita) è il frutto di un ripetuto uso del buon vecchio copia&incolla e della modifica di due o tre parametri. E' ovvio che un metodo dedicato all'impostazione dei parametri dell'oggetto GridBagConstraints avrebbe ridotto di 3 quarti la lunghezza del testo, ma, come si dice, repetita juvant.

Qualche spiegazione mi sembra dovuta.

L'oggetto GridBagLayout è la rappresentazione di una griglia virtuale in cui i singoli elementi possono occupare un numero arbitrario di celle sia lungo l'asse delle X che lungo l'asse delle Y.

L'impostazione dei parametri dei componenti (che andranno ad infilarsi nelle celle) passa attraverso l'uso di un oggetto GridBagConstraints:

gridBagLayout.setConstraints(componente, gridBagConstraints);

La domanda è come l'oggetto GridBagConstraints interagisce con la griglia virtuale:

ci sono 6 campi che devi impostare necessariamente:

gridx e gridy indicano la posizione della cella di partenza nella griglia virtuale: ad esempio se il componente "inizia" nella prima cella in alto a sinistra della griglia allora -> gridx = 0 e gridy = 0

gridwidth indica il numero di celle orizzontali occupate dal componente, gridheight idem in verticale: qui il valore è 1 se il componente occupa una sola cella, 2 o più a seconda di come vuoi che siano disposti i componenti

weigthx e weigthy sono di solito i più bizzarri da comprendere: con essi si indica la proporzione di spazio (orizzontale e verticale) che sarà assegnata al componente quando Java disegnerà la finestra. La somma complessiva dei "pesi" di tutti i componenti inseriti deve essere uguale a 100 (100 in verticale e 100 in orizzontale). Un componente può dare un contributo fisso oppure "adattarsi a ciò che rimane": in quest'ultimo caso il peso deve essere uguale a 0.

E' comprensibile un po' di depressione quando si affronta per la prima volta un GridBagLayout: ma se fai un po' di prove (magari inizia con qualcosa di più semplice, tipo una griglia di 2x2 celle con 3 bottoni) alla fine diventerà il tuo layout preferito, perchè è molto più rapido e pulito dell'uso di 3 o 4 layout diversi con pannelli che si infilano uno dentro l'altro.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2003, 13:25   #5
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
PGI...per esperienza, prima di passare al GridBagLayout è necessario passare per altri Layout più semplici, quali il BorderLayout o il GridLayout...per capire i concetti che stanno dietro. Si possono ottenere discreti risultati. L'ultimo passo per realizzare GUI complesse darà l'utilizzo del GridBag...
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2003, 13:52   #6
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Oddio, ad essere sincero pensavo che avesse già provato gli altri layout ma non ne fosse soddisfatto, anche perchè per spostare a in altro a sinistra un gruppo di pulsanti bisognerebbe combinarne almeno due (un BorderLayout con un pannello al centro e un BoxLayout applicato ad un pannello a "ovest" del BorderLayout) e poi bisogna pensare alla disposizione degli altri componenti nel resto della finestra.

Pensa un po' che sulla comprensione dei layout ho fatto passi da gigante proprio partendo dal layout che costruisti tu per quel famoso mp3-player ormai cent'anni fa
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2003, 17:57   #7
Bouba_Diop
Senior Member
 
Iscritto dal: Jun 2003
Città: Torino
Messaggi: 319
Ciao!

Grazie a tutti per l'aiuto
Ho provato a modificare un pò il codice di PGI (stupendo grazie!) e sono riuscito ad aggiungere 2 pulsanti nella posizione che mi ero fissato.
Adesso.... java fa i pulsanti a seconda della lunghezza della scritta. E' possibile impostare tutti i pulsanti della lunghezza che voglio io?




(Comunque è stato un pò traumatico capire il codice, sono un pò duro di comprendonio, difatti alcune cose le devo rivedere )

grazie ancora

ciao
Bouba_Diop è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2003, 18:02   #8
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da cn73
lascia stare i tool grafici tipo quello di jbuilder, non imparerai mai!
io infatti non ci tengo minimamente a imparare ad usare bene swing. progettare la UI è secondo me la parte più noiosa (non certo inutile) della realizzazione di un programma
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2003, 20:16   #9
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Non tutti i layout swing tengono conto dell'impostazione delle dimensioni "preferite" di un componente.

Il GridBagLayout fortunatamente si.

Codice:
button1.setPreferredSize(new Dimension(300, 45));

in questo caso il primo bottone della griglia è lungo 300 e alto 45, gli altri hanno la dimensione determinata dalla lunghezza della stringa.

Tieni conto che l'uso di una dimensione arbitraria non è propriamente consigliabile: non è detto infatti che il risultato ottenuto sia lo stesso su tutti i sistemi.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2003, 08:18   #10
Bouba_Diop
Senior Member
 
Iscritto dal: Jun 2003
Città: Torino
Messaggi: 319
Ciao

Finalmente dopo molte prove sono riuscito a maneggiare quel codice.

Adesso, vorrei farvi un'altra domanda: E' possibile utilizzare il comando "onMouseOver" o simili in un programma java? (Io per ora so solo utilizzare "setToolTipText" )
Ho guardato un pò, ma compare sempre solo su java applet per html...

Se fosse possibile come si potrebbe cambiare lo sfondo di un pulsante quando ci passo sopra con il mouse?


grazie ciao
Bouba_Diop è offline   Rispondi citando il messaggio o parte di esso
Old 13-12-2003, 13:22   #11
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Quote:
Originariamente inviato da recoil
io infatti non ci tengo minimamente a imparare ad usare bene swing. progettare la UI è secondo me la parte più noiosa (non certo inutile) della realizzazione di un programma

Questioni di punti di vista...io la trovo la parte più divertente, non per nulla ne ho fatto il mio pezzo forte
cn73 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
Invia il tuo nome a 1,5 milioni di chilo...
Apple MacBook Neo 13'' con chip A18 Pro ...
Insieme a Leica SL3-P presentate le otti...
La Cina svilupperà anche il razzo...
Rocket Lab e la missione Victus Haze per...
Starship: Ship 40 ha eseguito uno static...
I nuovi Samsung Galaxy Watch 9 si mostra...
Einsten aveva ragione, di nuovo: captate...
Top 10 offerte Amazon: 5 sono partite qu...
AI Conf 2026: l'intelligenza artificiale...
Samsung Galaxy S26 scende a 711,49€: un ...
Dopo il maxi blackout, la Spagna cambia ...
Costa meno di un MacBook e fa molto di p...
Ecco tutti i robot aspirapolvere rimasti...
Più partite da seguire in contemporanea?...
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: 23:23.


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