Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-10-2006, 16:58   #1
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
[JAVA] Creazione Alberi Grafici

Ragazzi, devo, in preatica, creare un albero, senza specifiche sul nujmero di figli e sul numero di livelli, tutto modificabile in esecuzione.

Praticamente parto da una root e poi aggiungo un livello con n nodi, e così via.

Non ho idea di come farlo in java, ho trovato gambit, sarebbe proprio quello che serve a me, chi mi aiuta???
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2006, 17:25   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Mhhhh... devi/vuoi farlo da zero zero? Perchè di già pronto c'è DefaultTreeModel con i suoi DefaultMutableTreeNode.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2006, 19:46   #3
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da PGI-Bis
Mhhhh... devi/vuoi farlo da zero zero? Perchè di già pronto c'è DefaultTreeModel con i suoi DefaultMutableTreeNode.
dici dici.....praticamente la mia tesi è anche su questo.....
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2006, 23:00   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ok, non ho capito niente .

Viso pallido volere usare DefaultTreeModel e DefaultMutableTreeNode? O dovere fare tutto a manina santa?
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2006, 12:21   #5
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Senti PGI, ma perché non scrivi un libro o qualcosa del genere?
Seriamente, penso che in questo forum (e anche fuori) tu sia l'unico
che sa tutto delle swing, di java, ecc.

Vedendo i tuoi post mi sembra che la voglia di scrivere non ti manchi...
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2006, 12:31   #6
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
Quote:
Originariamente inviato da lovaz
Senti PGI, ma perché non scrivi un libro o qualcosa del genere?
Seriamente, penso che in questo forum (e anche fuori) tu sia l'unico
che sa tutto delle swing, di java, ecc.

Vedendo i tuoi post mi sembra che la voglia di scrivere non ti manchi...
non male come idea......

Comunque non conoscendo la differenza non è che protesti darmi esempi di qualsiasi genere???


Comunque ho del codice sottomano, adesso vedo e vi faccio sapere.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2006, 15:43   #7
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Diciamo – in Java – che quello che vogliamo ottenere è:

Codice:
public interface TreeControl {
	void addNode(String parent, String child);
	
	java.awt.Component getTreeComponent();
}
getTreeComponent() serve per "vedere" e addNode per accrescere l'albero. Supponiamo anche che la radice abbia un valore noto a priori ("radice", tiè ). Uso:

Codice:
TreeControl tree = qualcosa:
tree.addNode("radice", "pippo"); //a radice attacchiamo pippo
tree.addNode("pippo", "giulio"); //a pippo attacco giulio
tree.addNode("radice", "franco"); //a radice attacco franco
Trattasi d'un raro esemplare della specie "alberus minimus sindacalis" . Come si TreeControl-la. Be', commento il codice anzichè blaterare ma è veramente semplicissimo.

Codice:
import javax.swing.*;
import javax.swing.tree.*;

public class MyTree implements TreeControl {
	//questa è la radice del modello dell'albero
	private DefaultMutableTreeNode root = new DefaultMutableTreeNode("radice");
	//questo è il modello dell'albero
	private DefaultTreeModel treeModel = new DefaultTreeModel(root);
	//questo è il componente che visualizza l'albero
	private JTree tree = new JTree(treeModel);
	
	//aggiunge child a parent
	public void addNode(String parent, String child) {
		//prima troviamo il nodo il cui valore è parent
		DefaultMutableTreeNode parentNode = findNode(parent);
		//se c'è...
		if(parentNode != null) {
			//creiamo un nuovo nodo che contiene child
			DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(child);
			//attacchiamo il nuovo nodo al nodo genitore
			parentNode.add(newNode);
			//informiamo il modello dell'albero che qualcosa è cambiato a
			//a partire da parentNode, incluso
			treeModel.reload(parentNode);
			//"apriamo" l'albero
			expandAll();
		} else {
			System.out.println("No node for: " + parent);
		}
	}
	
	/* restituisce il componente Swing di tipo JTree che visualizza i dati
	del modello dell'albero */
	public java.awt.Component getTreeComponent() {
		return tree;
	}
	
	/* Trova il nodo che contiene il valore value. */
	private DefaultMutableTreeNode findNode(String value) {
		//un compito arduo... :D Per ogni nodo...
		java.util.Enumeration<?> nodes = root.breadthFirstEnumeration();
		while(nodes.hasMoreElements()) {
			DefaultMutableTreeNode node =
				(DefaultMutableTreeNode)nodes.nextElement();
			//se il valore del nodo è una stringa (rendo la cosa esplicitamente)
			String nodeValue = (String)node.getUserObject();
			//...e quella stringa vale "value"
			if(nodeValue.equals(value)) {
				//...allora il nodo è quello che cerchiamo
				return node;
			}
		}
		//se no, ciccia
		return null;
	}
	
	/* Espande l'albero riga per riga. Le righe di getRowCount sono solo quelle
	visibili. Espandendo una riga è possibile che si rivelino altre righe che
	potrebbero a loro volta essere espanse. In pratica continuo ad espandere
	fintantochè due espansioni consecutive non producano un numero di righe
	identiche: in quel caso, l'albero sarà completamente "aperto" */
	private void expandAll() {
		int expandedRows = 0;
		while(expandedRows != tree.getRowCount()) {
			expandedRows = tree.getRowCount();
			for(int i = 0; i < expandedRows; i++) {
				tree.expandRow(i);
			}
		}
	}
}
Immancabile interfaccina Swing:

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

public class TreeGui {
	private JFrame window = new JFrame("Tree");
	private TreeControl tree;
	private JTextField parentField, childField;
	
	public void setupAndShow() {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createGui();
				window.setSize(500, 500);
				window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
				window.setVisible(true);
			}
		});
	}

	private void createGui() {
		JLabel parentLabel = new JLabel("Parent: ", JLabel.RIGHT);
		JLabel childLabel = new JLabel("Child:", JLabel.RIGHT);
		JTextField parentField = new JTextField(20);
		JTextField childField = new JTextField(20);
		JButton accept = new JButton("add Child to Parent");
		MyTree tree = new MyTree();
		JScrollPane treeScroller = new JScrollPane(tree.getTreeComponent());
		
		GridBagLayout lay = new GridBagLayout();
		GridBagConstraints lim = new GridBagConstraints();
		lim.insets = new Insets(4, 4, 4, 4);
		lim.fill = GridBagConstraints.HORIZONTAL;
		lim.gridx = 0;
		lim.gridy = 0;
		lay.setConstraints(parentLabel, lim);
		lim.gridx = 1;
		lim.gridy = 0;
		lim.weightx = 1;
		lay.setConstraints(parentField, lim);
		lim.weightx = 0;
		lim.gridx = 0;
		lim.gridy = 1;
		lay.setConstraints(childLabel, lim);
		lim.weightx = 0;
		lim.gridx = 1;
		lim.gridy = 1;
		lay.setConstraints(childField, lim);
		lim.weightx = 0;
		lim.gridx = 2;
		lim.gridy = 0;
		lim.gridheight = 2;
		lim.fill = GridBagConstraints.NONE;
		lim.anchor = GridBagConstraints.NORTHWEST;
		lay.setConstraints(accept, lim);
		
		JLabel filler = new JLabel();
		lim.gridx = 3;
		lim.gridy = 0;
		lim.weightx = 1;
		lay.setConstraints(filler, lim);
		
		JPanel topContainer = new JPanel(lay);
		topContainer.add(parentLabel);
		topContainer.add(childLabel);
		topContainer.add(parentField);
		topContainer.add(childField);
		topContainer.add(accept);
		topContainer.add(filler);
		
		JPanel container = new JPanel(new BorderLayout());
		container.add(topContainer, BorderLayout.NORTH);
		container.add(treeScroller, BorderLayout.CENTER);
		
		window.setContentPane(container);
		
		accept.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				createNewNode();
			}
		});
		
		this.tree = tree;
		this.parentField = parentField;
		this.childField = childField;
	}
	
	private void createNewNode() {
		String parentName = parentField.getText();
		String childName = childField.getText();
		tree.addNode(parentName, childName);
		childField.setText("");
	}
	
}
In alto ci sono due campi di testo e un pulsante. Nel campo di testo etichettato "Parent" si scrive il nome del nodo a cui si vuole aggiungere un figlio. Nel campo di testo etichettato "Child" si scrive il nome del nodo che si vuole aggiungere. Si preme il pulsante "add Child to Parent" e un nodo dell'albero riceverà un figliolo. Non commento il codice dell'interfaccia per volontà di sintesi. Spiegare i parametri del solo GridBagLayout richiederebbe parecchie pagine e mi sembra che non sia questo il "punto focale" della discussione. Manca il main:

Codice:
public class Main {

	public static void main(String[] args) {
		new TreeGui().setupAndShow();
	}
}
Naturalmente JTree è una classe un tantinello più versatile di quanto si vede in ciò che ho scritto. Ma basta un'abbrivio: una volta che si ha per le mani un principio di programma, con qualche esperimento (e la javadoc) ci si può sbizzarrire.

Ultima modifica di PGI-Bis : 21-10-2006 alle 17:03. Motivo: ho scritto volontè al posto di volontà. Andiamo bene...
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2006, 16:00   #8
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
naturalmente adesso provo e ti faccio sapere

comunque grazie mille.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
La Cina ha rilasciato un satellite dallo...
Il satellite LINK è rientrato nel...
L'ESA risponde alle critiche di Jared Is...
La NASA annuncia il nuovo telescopio spa...
HONOR pubblica The Sea Between Us, un co...
L'Olanda punta su NixOS e open source pe...
OPPO Find X10 Pro Max, il flagship con t...
Gli smartphone Samsung potrebbero avere ...
GeForce Now arriverà sui Googlebo...
Opus 5.5 e GPT-6 Sol nello stesso pomeri...
Weekend Amazon, le prime 5 offerte sono ...
Mini Compressore a 21,84€: gonfia le gom...
Gemini si aggiorna, ora può conne...
Da 32 a 65 pollici: ecco le TV più...
Xiaomi Redmi Note 17 a 269€: ecco perch&...
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: 06:47.


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