Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
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


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...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
Total War festeggia 25 anni: annunciato ...
Tante offerte Amazon rinnovate: sono ott...
Tanti articoli Apple scontati su Amazon:...
JBL a prezzi super: due modelli top tra ...
Sony e Bad Robot uniscono le forze: in a...
Il MIT rivela: l'IA può sostituir...
iPhone Air va in sconto: il nuovo iPhone...
Polaroid Now Gen 3 torna di moda: la fot...
Fallout 76: l'aggiornamento più g...
Prezzo folle per il top OLED da gaming: ...
Un nuovo processo antitrust per Apple in...
Amazon abbassa il prezzo delle AirPods 4...
Due super offerte Amazon: PC Desktop con...
Apple AirTag: il pacchetto da 4 ora a so...
La Cina senza NVIDIA: Moore Threads e Ca...
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: 11:23.


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