Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-12-2009, 13:54   #1
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
[Java] Swing: qualche chiarimento.

Ciao a tutti, sono ancora io. E' la prima volta che mi cimento nello sviluppo di un applicazione con interfaccia grafica, seppure piccola. Vorrei dunque qualche dritta:

1) Questo è più che altro un problema. Sto utilizzando una JTable e inizialmente appena avviata la finestra, questa non si vede(seppure vuota, parlo dei soli nomi delle colonne). Si vede solo se ridimensiono la finestra(anche rimpicciolendola).

2) Non capisco bene come dev'essere la struttura della GUI. Io per ora ho messo un JFrame che ha sotto di sè un JScrollPane che ha sotto di sè la JTable. Ecco, mi pare di aver capito che non posso aggiungere direttamente la JTable sotto il JFrame. Un po' di chiarimento su questa cosa?

3) La mia applicazione dovrà avere una finestra principale, che diciamo ci sarà sempre e una finestra che apparirà solo all'esigenza. Quest'ultima come conviene farla? Sempre JFrame e tutto il resto sotto?

Grazie

Ultima modifica di ndakota : 17-12-2009 alle 14:01.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 14:30   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Ciao a tutti, sono ancora io. E' la prima volta che mi cimento nello sviluppo di un applicazione con interfaccia grafica, seppure piccola.
Ciao, se ti stai cimentando con Swing per la primissima volta, ti linko delle risorse utili per future consultazioni:

-tutorial SwingEspresso by PGI
-tutorial GridBagLayout by PGI
-Java Tutorial - The Really Big Index [in particolare le due trails intitolate: " Graphical User Interfaces" e " Creating a GUI With JFC/Swing"]

Qui ti rispondo di fretta, perchè... sono di fretta (ma va? )
Quote:
Originariamente inviato da ndakota
1) Questo è più che altro un problema. Sto utilizzando una JTable e inizialmente appena avviata la finestra, questa non si vede(seppure vuota, parlo dei soli nomi delle colonne). Si vede solo se ridimensiono la finestra(anche rimpicciolendola).

2) Non capisco bene come dev'essere la struttura della GUI. Io per ora ho messo un JFrame che ha sotto di sè un JScrollPane che ha sotto di sè la JTable. Ecco, mi pare di aver capito che non posso aggiungere direttamente la JTable sotto il JFrame. Un po' di chiarimento su questa cosa?

3) La mia applicazione dovrà avere una finestra principale, che diciamo ci sarà sempre e una finestra che apparirà solo all'esigenza. Quest'ultima come conviene farla? Sempre JFrame e tutto il resto sotto?
1) Prova ad impostare la preferredSize della JTable.
@EDIT: e a chiamare pack() sul JFrame subito prima del setVisible(true), ovviamente.

2) Alcuni component (come JFrame oppure come JScrollPanel) sono deputati al contenimento di altri component al loro interno, al fine di determinare una gerarchia di components innestati uno dentro l'altro.

Questi components che sono pensati per contenere altri components, vengono chiamati containers.

JFrame e JScrollPane sono entrambi pensati per essere usti come containers, con la differenza che JFrame è anche JWindow, diciamo una finestra vera e propria (può essere visualizzato autonomamente, cioè viene utilizzato come radice di una gerarchia di componenti visualizzabili), mentre JScrollPane no.

I componenti-contenitori utilizzabili come "radici" in Swing sono: JFrame (la classica finestra), JDialog (classica finestra di dialogo modale) JApplet e JDesktopPane (una finestra che funziona come un desktop, che può contenere nei suoi limiti altri JInternalFrame).

Quindi quando tu vuoi visulizzare il tuo componente grafico, nel tuo caso una JTable, hai bisogno di definire una gerarchia di componenti in cui infilarla, non essendo di per se stessa una finestra.
Potresti dunque "infilare" la JTable in un semplice JFrame, ed andrebbe bene.
Ma vuoi anche che la JTable sia sempre visulizzabile, nel caso le sue dimensioni proiettate a video eccedano quelle del JFrame che la contiene (per esempio se il JFrame viene rimpicciolito dall'utente).

In questo caso infili la JTable nello JScrollPane, un componente programmabile dotato di scrollbar che risolve proprio il problema appena illustrato per il componente che contiene; infine infilili il tutto in un componente "radice" per definire correttamente la tua gerarchia di visualizzazione: un JFrame.

La tua gerarchia è così definita:
Codice:
[x] JFrame (root)
 |
 ---> [x] JScrollPane
       |
       ---> [x] JTable
3) JFrame oppure JDialog, modale o meno (dipende tutto da cosa devi fare) e tutto il resto "all'interno", non "sotto", stiamo pur sempre parlando di contenitori, non di sodomizzatori
__________________

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 : 17-12-2009 alle 15:01. Motivo: dimenticato particolare importante.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 15:52   #3
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
grazie, chiarissimo e divertente
Swing espresso di PGI-bis e il the really big index li sto già consultando
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 16:50   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da ndakota Guarda i messaggi
grazie, chiarissimo e divertente
Swing espresso di PGI-bis e il the really big index li sto già consultando
C'è un'altro aspetto di cui tenere conto nella faccenda della gerarchia di componenti, che nel post sopra non ho accennato: i LayoutManager.

Un LayoutManager è un oggetto che, associato a un container ne gestisce la ripartizione dello spazio interno utile per la proiezione grafica a video di tutti i component che il container stesso contiene, secondo una certa politica (che poi appunto caratterizza il LayoutManager e lo distingue dagli altri).

Ogni componente che è anche un container ha un LayoutManager associato di default.
Per JFrame, ad esempio, è un BoderLayout; per JPanel è un FlowLayout.

Nella libreria Swing sono definiti diversi LayoutManager per permettere all'utente di implementare programmaticamente le politiche di ripartizione degli spazi che gli sono neccessarie, di volta in volta.
Alcuni LayoutManagers sono più indicati per un uso "diretto" o "manuale", altri sono stati progettati per essere utilizzati indirettamente, tramite un GUI Builder (come ad esempio quello presente in NetBeans).

Per JFrame, il suo BorderLayout gestisce lo spazio della finestra suddividendolo in 5 regioni o "posizioni", ognuna delle quali può contenere un solo component: NORTH, SOUTH, WEST, EAST e CENTER.

Quando aggiugni il tuo JScrollPane al JFrame, senza specificare esplicitamente la "posizione", esso viene inserito di default in CENTER.
__________________

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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 16:57   #5
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
C'è un'altro aspetto di cui tenere conto nella faccenda della gerarchia di componenti, che nel post sopra non ho accennato: i LayoutManager.

Un LayoutManager è un oggetto che, associato a un container ne gestisce la ripartizione dello spazio interno utile per la proiezione grafica a video di tutti i component che il container stesso contiene, secondo una certa politica (che poi appunto caratterizza il LayoutManager e lo distingue dagli altri).

Ogni componente che è anche un container ha un LayoutManager associato di default.
Per JFrame, ad esempio, è un BoderLayout; per JPanel è un FlowLayout.

Nella libreria Swing sono definiti diversi LayoutManager per permettere all'utente di implementare programmaticamente le politiche di ripartizione degli spazi che gli sono neccessarie, di volta in volta.
Alcuni LayoutManagers sono più indicati per un uso "diretto" o "manuale", altri sono stati progettati per essere utilizzati indirettamente, tramite un GUI Builder (come ad esempio quello presente in NetBeans).

Per JFrame, il suo BorderLayout gestisce lo spazio della finestra suddividendolo in 5 regioni o "posizioni", ognuna delle quali può contenere un solo component: NORTH, SOUTH, WEST, EAST e CENTER.

Quando aggiugni il tuo JScrollPane al JFrame, senza specificare esplicitamente la "posizione", esso viene inserito di default in CENTER.
Ok, grazie. Tutte cose molto utili. E dei JPanel che mi dici? Pensavo si usassero come container interni al JFrame però ho visto appunto un esempio per la JTable che usava il JScrollPane.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 17-12-2009, 17:46   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Ok, grazie. Tutte cose molto utili. E dei JPanel che mi dici? Pensavo si usassero come container interni al JFrame però ho visto appunto un esempio per la JTable che usava il JScrollPane.
Beh, questo perchè di una JTable in genere si vuole sempre rendere visibile tutta la sua area di proiezione e se lo spazio nel container per visualizzarla tutta in un botto potrebbe non esserci (JFrame ridimensionabile ad libitum dall'utente) JScrollPane è un "operaio specializzato" (internamente lavora con un oggetto che implementa il concetto di "viewport" ["oblò", in italiano] e le scrollbar per permette all'utente di controllarlo) alle cui cure affidare la tabella.

JPanel invece punta molto sulla semplicità: descrive semplicemente un'area rettangolare, un pannello, appunto.
E' un contenitore generico, molto versatile; dato che gli puoi associare diversi layout managers lo puoi usare come uno strumento per gestire e suddividere lo spazio.

Ad esempio con il tuo JFrame: supponi di aver aggiunto lo scrollpane con la table nel CENTER del BorderLayout.
Ora supponi di aver bisogno di piazzare nell'area a sinistra (WEST) tre sotto aree, una sopra l'altra, per gestire tre diversi gruppi di componenti.

Abbiamo detto che dentro un singola regione/"posizione" definita da un BorderLayout si può inserire un solo component: come fare?

Una soluzione consiste nel inserire un JPanel nella "posizione" (WEST) desiderata (la occuperà tutta), e poi suddividere l'interno di quel JPanel in modo opportuno (potremmo imporre a quel JPanel un FlowLayout orientato in verticale, e inseririci dentro tre nuovi JPanel (magari con un bordo visibile), uno per ognuno dei tre diversi gruppi di componenti).

Un'immagine vale più di mille parole: ecco un JFrame con BordeLayout che nella regione WEST ha inserito un JPanel definito più o meno come ti ho descritto:

In CENTER c'è un JPanel, anche questo con un layout manager che dispone in verticale i componenti interni, che contiene nell'ordine: un JPanel, uno JScrollPane (che a sua volta contiene altra roba) e un altro JPanel, in posizione EAST c'è un'orribile toolbar e al JFrame è stata imposta una JMenuBar.
__________________

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 : 17-12-2009 alle 17:48.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Tesla Model 3 superata per la prima volt...
AMD ha già risolto la crisi della...
La “batteria di Baghdad” funziona davver...
Pannelli solari al contrario? Non propri...
Google Gemini si espande: arrivano le es...
Mercato TV: la leadership di Samsung reg...
L'AI che lavora 100 volte più vel...
LIDAR, battaglia finale: MicroVision met...
Il 2025 è stato l'anno di BYD: +2...
L'IA enterprise entra nella fase decisiv...
Il tiktoker Khaby Lame cede la sua socie...
Apple Pencil Pro scende a 122€ su Amazon...
Ring in forte sconto su Amazon: videocit...
Blink torna a fare sul serio: Mini 2K+ c...
Edison aveva creato il grafene senza sap...
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: 18:44.


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