Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-10-2006, 11:41   #1
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
[JAVA] Layout ridimensionabili

Ragazzi, come faccio a fare in modo da rendere i layout ridimensionabili secondo preferenza dell'utente???

mi spiego meglio, vedete ad esempio quando aprite i preferiti su firefox....bene, se mettete il cursore sul bordo, lui cambia forma e vi permette di ridimensionare la larghezzza.

Sarebbe possibile fare una cosa del genere con i layout(tipo Border Layout)o con un qualsiasi altro layout???

se devo reimplementarne uno mio, come faccio a permettere questa operazione???
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2006, 12:28   #2
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Intendi uno split pane?

Qui vedi come è fatto (la foto dell'astronauta):
http://java.sun.com/docs/books/tutor...omponents.html
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2006, 12:33   #3
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da lovaz
Intendi uno split pane?

Qui vedi come è fatto (la foto dell'astronauta):
http://java.sun.com/docs/books/tutor...omponents.html
esatto, una cosa del genere........sai come è fatto quello???
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2006, 13:31   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
I partecipanti al fattaccio sono due: il contenuto ed il suo contenitore. Il contenitore è responsabile della gestione degli eventi del mouse che determinano il ridimensionamento e il contenuto stabilisce le informazioni necessarie affinchè ridimensionamento vi sia e di quanto.

Al minimo ti serve un LayoutManager, un Container e un Component.

Ti faccio un esempio che, per pigrizia, ricicla il LayoutManager FlowLayout, con ancoraggio FlowLayout.LEFT. Il FlowLayout "va bene" perchè rispetta le dimensioni preferite del contenuto e l'ancoraggio a sinistra ti permette di lavorare sul componente disponendo di un'origine immutabile.

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

public class ResizableComponent extends JPanel {
	private Cursor plainCursor;
	private final Cursor RESIZE_CURSOR = Cursor.getPredefinedCursor(
		Cursor.W_RESIZE_CURSOR);
		
	/** Punto di ancoraggio del trascinamento. E' usato sia per calcolare la
	quantità di spostamento che per determinare se sia in corso il
	trascinamento */
	private Point dragStart;

	/** Adattatore Mouse connesso al contenitore di questo componente */
	private MouseInputAdapter mouseHook = new MouseInputAdapter() {
		/** Cambia i cursori */
		public void mouseMoved(MouseEvent e) {
			if(nearBorder(e.getPoint(), getBounds())) {
				setResizeCursor();
			} else {
				setPlainCursor();
			}
		}
		
		/** Inizia le operazioni di trascinamento */
		public void mousePressed(MouseEvent e) {
			if(nearBorder(e.getPoint(), getBounds())) {
				startResize(e.getPoint());
			}
		}
		
		/** Trascinamento: ridimensiona il componente */
		public void mouseDragged(MouseEvent e) {
			if(dragStart != null) {
				resize(e.getPoint());
			}
		}
		
		/** Ferma le operazioni di trascinamento */
		public void mouseReleased(MouseEvent e) {
			dragStart = null;
		}
	};
	
	/** Invocato se il mouse sia premuto in un punto del contenitore valido
	per il ridimensionamento di questo componente */
	private void startResize(Point p) {
		dragStart = p;
	}
	
	/** Ridimensiona questo componente: "quanto" è determinato dallo
	spostamento subito dal mouse */
	private void resize(Point p) {
		int dx = p.x - dragStart.x;
		dragStart = p;
		Dimension size = getSize();
		size.width += dx;
		setPreferredSize(size);
		revalidate();
	}
	
	/** Ferma le operazioni di trascinamento */
	private void stopResize() {
		dragStart = null;
	}
	
	/** Determina se il mouse si trovi più o meno in corrispondenza del bordo 
	[destro] di questo componente */
	private boolean nearBorder(Point p, Rectangle bounds) {
		return 
			p.x >= bounds.x + bounds.width - 2 &&
			p.x <= bounds.x + bounds.width + 2;
	}
	
	/** Applica il cursore di ridimensionamento al contenitore di questo
	componente */
	private void setResizeCursor() {
		Component parent = getParent();
		if(parent != null && parent.getCursor() != RESIZE_CURSOR) {
			plainCursor = parent.getCursor();
			parent.setCursor(RESIZE_CURSOR);
		}
	}
	
	/** Applica il cursore "normale" al contenitore di questo componente */
	private void setPlainCursor() {
		Component parent = getParent();
		if(parent != null) {
			parent.setCursor(plainCursor);
		}
	}
	
	/** Costruttore */
	public ResizableComponent() {
		setBorder(BorderFactory.createLineBorder(Color.BLACK, 2));
		setBackground(Color.RED);
		setOpaque(true);
		setPreferredSize(new Dimension(100, 100));
	}
	
	/** Quando questo componente riceve una notifica di inserimento, dopo aver
	condotto le normali operazioni stabilite dal framework, rifila al suo
	contenitore l'adattatore mouseHook */
	public void addNotify() {
		super.addNotify();
		Component parent = getParent();
		if(parent != null) {
			parent.removeMouseListener(mouseHook);
			parent.removeMouseMotionListener(mouseHook);
			parent.addMouseListener(mouseHook);
			parent.addMouseMotionListener(mouseHook);
		}
	}
}
Il resto l'ho messo nel Main ma considera che anche come è fatto questo "resto" è determinante:

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

public class Main {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Main().startUI();
			}
		});
	}
	
	private void startUI() {
		JPanel container = new JPanel();
		container.setPreferredSize(new Dimension(400, 400));
		container.setLayout(new FlowLayout(FlowLayout.LEFT));
		container.add(new ResizableComponent());
		JFrame frame = new JFrame("Resiza sample");
		frame.setContentPane(container);
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
	}
}
Nota come l'attribuzione delle dimensioni al componente sia "assoluta": un componente può allargarsi di un milione di pixel. JSplitPane funziona in modo simile solo che assegna ai componenti una nuova dimensione determinata come percentuale dello spazio assegnato al contenitore: questo impedisce ad un componente di assumere larghezze o altezze che fuoriescano dalla regione di spazio assegnata al contenitore.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2006, 13:33   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il codice riportato è solo un esempio della "meccanica rilevate": ci sono un tot di controlli da eseguire – un componente non accetta dimensioni negative, è presupposto un ridimensionamento orizzontale causato da un trascinamento del lato "destro" – ma quello che manca dovrebbe essere evidente.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2006, 14:12   #6
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
ok, grazie, se ho problemi ti rompo le scatole
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
'L'UE dovrebbe essere abolita': la spara...
Non solo smartphone: Samsung sta lavoran...
Nessuno vuole comprare iPhone Air: il va...
Porsche Taycan 2027 elettrica con cambio...
Roscosmos: stazione spaziale russa ROS a...
Auto 2035, sei governi UE (c'è l'...
Chernobyl: la cupola di contenimento non...
SSD come CPU: queste memorie sono in gra...
La previsione di CATL: barche elettriche...
Stangata in arrivo: PC e notebook coster...
Lian Li si è inventata il primo a...
Amazon in raptus sconti: ogni 24 ore nov...
44 idee regalo sotto i 50€: con le offer...
Super Sconti Amazon Haul: ribassi fino a...
Cloudflare ha bloccato 416 miliardi di r...
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: 21:50.


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