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 23-01-2012, 19:15   #1
thomasBis
Junior Member
 
Iscritto dal: Jan 2012
Messaggi: 6
problema Java Swing

Salve, ho un problema realizzando l'interfaccia grafica di un piccolo gioco in Java.. vorrei adattare dinamicamente le dimensioni del JPanel al JFrame, nel senso che, quando creo il mio frame, questo ha una sua dimensione, ma quando lo estendo a tutto schermo, il panel rimane alla sua dimensione originale attaccandosi all'angolo superiore sinistro! come posso fare?
Grazie mille.. premetto che sto studiando da autodidatta le librerie Swing da poco!
thomasBis è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2012, 09:03   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Puoi postare lo spezzone di codice dove crei il frame, istanzi il panel e lo infili nel frame? Comunque di default, il layout manager di un JFrame è una istanza di BorderLayout, e se ci infili un componente senza specifiarne esplicitamente la posizione, viene aggiunto in posizione BorderLayout.Center, il che causa il ridimensionamento dinamico del componente fino all'occupazione di tutta la superficie disponibile (al netto di eventuali altri componenti nelle posizioni North, East, South e West).
__________________

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 24-01-2012, 09:55   #3
thomasBis
Junior Member
 
Iscritto dal: Jan 2012
Messaggi: 6
// classe che crea il JPanel
public class background extends JPanel {

private static final long serialVersionUID = 6679038779869120082L;
private Image _image;
private int _x1;
private int _y1;


public background(Image _image, int _x, int _y) {
super();
this._image = _image;
this._x1 = _x;
this._y1 = _y;
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(_image, 0, 0, _x1, _y1,this);
}
}

// classe JFrame in cui istanzio il mio background
public class MainFrame extends JFrame {

private static final long serialVersionUID = 1L;
private Image _image;
private int _x = 1614;
private int _y = 814;
JMenuBar menuBar;

public MainFrame() {

super("blabla");
setSize(1625,1014);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);

try {
_image = ImageIO.read(new File ("C:/Users/...etc.etc."));
JPanel panel = new background(_image, _x, _y);
setContentPane(panel);
panel.setLayout(null);

menuBar = new JMenuBar();
menuBar.setBounds(137, 117, 22, 20);
panel.add(menuBar);

JMenu mnNewMenu = new JMenu("");
mnNewMenu.setPreferredSize(new Dimension(22, 20));
menuBar.add(mnNewMenu);

JMenuItem mntmNewMenuItem = new JMenuItem("prova1");
mnNewMenu.add(mntmNewMenuItem);

JMenuItem mntmNewMenuItem_1 = new JMenuItem("prova2");
mnNewMenu.add(mntmNewMenuItem_1);

}
catch (Exception e) {
e.printStackTrace();
}

}

}

come vedi ho impostato il layout su "absolute".. con questo codice, nel momento in cui ingradisco il frame con il classico pulsante "Ingrandisci" di Windows, il JPanel si riposiziona con le sue dimensioni originali in alto a sinistra!
Grazie mille
thomasBis è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2012, 11:44   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Non avendo specificato un layout manager per il frame, esso è di default un BorderLayout, come ti spiegavo sopra. Il tuo JPanel (background) viene aggiunto nel frame senza specificare la posizione, quindi viene inserito nella posizione in BorderLayout.Center (sempre come detto sopra):
Codice:
JPanel panel = new background(_image, _x, _y);
setContentPane(panel);
Ergo: il tuo pannello si ridimensiona dinamicamente.
A te non sembra solo perchè l'immagine che disegni come sfondo viene sempre disegnata, rispetto al pannello che la contiene, dentro un rettangolo in posizione X0 Y0 di larghezza e altezza fissate (_x, _y).
Codice:
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(_image, 0, 0, _x1, _y1,this);
}
Che il frame sia a tutto schemo o sia piccolo non cambia il fatto che tu disegni quella immagine sempre in un rettangolo x0, y0, di larghezza _x e altezza _y.

Te ne puoi rendere conto ad esempio impostando il colore rosso come sfondo del tuo background:
Codice:
JPanel panel = new background(_image, _x, _y);
background.setBackground(Color.red);
setContentPane(panel);
__________________

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 : 24-01-2012 alle 11:47.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2012, 11:56   #5
thomasBis
Junior Member
 
Iscritto dal: Jan 2012
Messaggi: 6
Ok, ora mi è chiaro.. allora come dovrei fare per ingrandire anche il panel? si può fissare come dimensione la Size del frame in modo che si modifichi automaticamente?
Thanks
thomasBis è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2012, 12:04   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da thomasBis Guarda i messaggi
Ok, ora mi è chiaro.. allora come dovrei fare per ingrandire anche il panel? si può fissare come dimensione la Size del frame in modo che si modifichi automaticamente?
Thanks
No, credo che non ti sia ancora chiaro al 100%.
Per come hai definito:
1) il tipo di layout manager del frame [BorderLayout]
2) la posizione di inserimento del pannello nel layout manager del frame [BorderLayout.CENTER]
il pannello si ridimensiona già dinamicamente al ridimensionarsi del frame.

Il problema è che tu poi disegni l'immagine sempre con le stesse dimensioni, a prescindere da quanto è largo e alto il pannello in quel momento.
Non so se ora è più chiaro.

Comunque, per ottenere le dimensioni di un componente, basta invocare il metodo getSize sul componente stesso
Poi non so in che posizione vuoi avere la menubar, ma se per caso la vuoi nella posizione tipica che occupa nelle finestre standard a cui simao abituati (in alto), basta che, invece di inserirla nel pannello dopo averle settato esplicitamente i bounds, la inserisci (senza averle settato i bounds) nel frame con frame.setMenuBar(menuBar)...
__________________

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 : 24-01-2012 alle 12:07.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2012, 16:10   #7
thomasBis
Junior Member
 
Iscritto dal: Jan 2012
Messaggi: 6
Ora mi è tutto più chiaro, però il problema che persiste è:
anche se io con un getSize() ottengo le dimensioni del mio JFrame, poi come posso far si che l'oggetto 'panel' ricostruisca l'immagine con le nuove dimensioni una volta ingrandito il frame? in pratica per trovare una soluzione dovrei sapere cosa succede quando clicco su "ingrandisci", cioè se posso implementare una sorta di listener che mi cambi le dimensioni di caricamento dell'immagine!

thomasBis è offline   Rispondi citando il messaggio o parte di esso
Old 24-01-2012, 16:56   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Non occorre che prendi le dimensioni del frame, basta chre prendi le dimensione del pannello con un getSize/getWidth/getHeight (visto che, come detto sopra, il pannello è sempre esteso) subito prima di disegnare l'immagine (ovvero nel metodo paintComponet del pannello stesso). Ad esempio:
Codice:
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    int width = this.getWidth();
    int height = this.getHeight();
    g.drawImage(_image, 0, 0, width, height, this);
}
Poi bisogna vedere se il risultato è gradevole, dato che questa operazione forza l'immagine a essere scalata alle dimensioni rettangolari specificate come parametri nella chiamata a drawImage.
__________________

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 25-01-2012, 00:10   #9
thomasBis
Junior Member
 
Iscritto dal: Jan 2012
Messaggi: 6
GRAZIE MILLE sono riuscito a risolvere questo bel grattacapo!
thomasBis è 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...
Nuovo sfidante per NVIDIA: una startup c...
Grand Theft Auto 6 potrebbe arrivare sol...
LG OLED evo AI C5 48 pollici in offerta ...
Le 14 offerte migliori su Amazon oggi, l...
Telnet dimenticato: una falla critica es...
Doom gira su cuffie in-ear: puoi provarl...
Ryzen AI Max+: secondo Intel non hanno s...
Galaxy Z Flip7 Olympic Edition: lo smart...
Patch di emergenza per Microsoft Office:...
Google Pixel 10 Pro al minimo storico su...
Highguard debutta con numeri record, ma ...
Offerte Tineco Amazon: scope elettriche ...
Apple rilascia iOS 26.2.1 e iPadOS 26.2....
NVIDIA presenta Earth-2: il sistema AI c...
iPhone 5s si aggiorna dopo 13 anni dal l...
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: 14:13.


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