Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
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


Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
Invia il tuo nome su Titano, la luna di ...
Starship: Ship 42 e Super Heavy Booster ...
Chrome, meno tab switching con la nuova ...
L'IA agentica spopola fra le aziende, ma...
ASUS UGen300 arriva in Italia a 299 euro...
Iliad aggiorna la gamma di offerte per I...
Stop ai social per i minori, perché Brux...
Google Chrome integra Gemini in Enhanced...
Meta lancia Waddle World e Style Sketch,...
Jensen Huang nella rete dello spionaggio...
Valve non vieterà i giochi creati...
3 milioni di euro di redditi non dichiar...
XREAL AURA: gli occhiali XR via cavo con...
E-Plato, 3 milioni per sviluppare Socrat...
Alexa Home Map trasforma la casa in una ...
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:20.


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