Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
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


Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Rubati 6 pallet di hardware NVIDIA da 11...
Addio ai limiti del silicio? Ecco il dia...
Windows 11 27H2 sarà un 'cambio completo...
Hai mai notato che l'iPhone sbaglia semp...
Raffreddamento a liquido e schermo perso...
TSMC valuta la produzione di 3D DRAM su ...
Il Cybertruck ha i giorni contati? Musk ...
Meta porta la voce su Muse, e a sponsori...
Perché il disco principale di Win...
Quanta acqua consuma l'IA? Da cinque goc...
Airbnb lancerà un assistente AI per pian...
25 miliardi sul tavolo: i sauditi voglio...
TV Haier QLED da 65'' a meno di 400€ su ...
Il meglio degli sconti Amazon del weeken...
Il rumore degli aerei in sottofondo può ...
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: 00:42.


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