Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-03-2006, 18:21   #1
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
[JAVA] Esempi su KeyListener

ragazzi, oltre a questo http://java.sun.com/docs/books/tutor...ylistener.html e a questo http://java.sun.com/docs/books/tutor...EventDemo.java , avete per caso altri esempi pratici su come funziona questa interfaccia???
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 16:18   #2
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
up
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 16:48   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Ti dirò, io di libri su Java me ne sono letti un tot e li ho trovati tutti strettamente in linea con quanto indicato nel tutorial di Sun.

Mi stupirei se esistesse qualcosa di più. KeyListener è una delle molte forme del pattern listener incluse in AWT/Swing. In sè, non fa nulla più di quanto è mostrato in quel codice d'esempio.

Anzi, in verià non fa neanche quello . Il funzionamento concreto è altrove (EventQueue e AWTEventMulticaster) ma, dal punto di vista di noi "utenti" AWT/Swing, è quasi un dettaglio.

Ciao.

Pierluigi.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 17:45   #4
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
ma tu hai mai fatto qualcosa, se si potresti postarla per farmi rendere conto.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 18:09   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Questo è un pezzo di un esperimento di un pezzo di un editor XML. Tradotto, è niente di niente .

Codice:
package it.tukano.xml;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class XMLEditor extends JComponent implements KeyListener {
	private int caretPosition;
	private ArticleNode root = new ArticleNode();
	private NodeView rootView = new ArticleView();
	private RenderInfo editorInfo = new RenderInfo();

	public XMLEditor() {
		setFocusable(true);
		addKeyListener(this);
		PCData data = new PCData();
		TitleNode node = new TitleNode();
		node.children().add(data);
		data.setParent(node);
		root.insert(node, 0);
	}
	
	public void save() {
		System.out.println(root);
	}
	
	public PCData getTextElement(IntRef offsetHolder) {
		ArrayList<XMLNode> buffer = new ArrayList<XMLNode>();
		buffer.addAll(root.children());
		PCData target = null;
		int textLen = 0;
		for(int i = 0; i < buffer.size(); i++) {
			XMLNode n = buffer.get(i);
			if(n.getName() == Tags.PCDATA) {
				if(caretPosition == 0) return (PCData)n;
				int len = n.toString().length();
				if(caretPosition >= textLen && caretPosition <= textLen + len) {
					target = (PCData)n;
					offsetHolder.value = caretPosition - textLen;
					break;
				}
				textLen += len;
			} else {
				buffer.addAll(n.children());
			}
		}
		return target;
	}
	
	public void insert(XMLNode newNode) {
		IntRef off = new IntRef();
		PCData target = getTextElement(off);
		target.insert(newNode, off.value);
		caretPosition++;
		repaint();
	}
	
	public void keyTyped(KeyEvent e) {
		processCharTyped(e.getKeyChar());
	}
	
	public void keyPressed(KeyEvent e) {
		processKeyPressed(e.getKeyCode());
	}
	
	public void keyReleased(KeyEvent e) {}
	
	private void processCharTyped(char c) {
		if(CharUtil.isValidChar(c)) {
			if(c == '\t') { System.out.println("tabb"); }
			IntRef offset = new IntRef();
			PCData node = getTextElement(offset);
			node.buffer().insert(offset.value, c);
			caretPosition++;
			repaint();
		} else if(c == '\t') {
			System.out.println("tab");
		}
	}
	
	private void processKeyPressed(int code) {
		switch(code) {
			case KeyEvent.VK_TAB:
				System.out.println("tab");
				break;
			case KeyEvent.VK_LEFT:
				if(caretPosition > 0) caretPosition--;
				repaint();
				break;
			case KeyEvent.VK_RIGHT:
				if(caretPosition < editorInfo.textLength) caretPosition++;
				repaint();
				break;
			case KeyEvent.VK_ENTER:
				generateNewNode();
				break;
			case KeyEvent.VK_BACK_SPACE:
				removeCharBefore();
				break;
			case KeyEvent.VK_DELETE:
				removeCharAfter();
				break;
		}
	}
	
	public void paintComponent(Graphics g) {
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, getWidth(), getHeight());
		
		RenderInfo info = new RenderInfo();
		info.graphics = g;
		info.x = 0;
		info.y = 0;
		info.lineWidth = getWidth() - 20;
		info.caretPosition = caretPosition;
		
		g.translate(10, 0);
		rootView.paint(root, info);
		g.translate(-10, 0);
		
		editorInfo = info;
		int h = getPreferredSize().height;
		if(h != editorInfo.y + 20) {
			System.out.println("Reset size");
			setPreferredSize(new Dimension(getWidth(), editorInfo.y + 20));
			Component parent = this;
			while((parent = parent.getParent()) instanceof JViewport == false
				&& parent != null) ;
			if(parent != null) {
				((JViewport)parent).setView(this);
				requestFocusInWindow();
			}
		}
	}
	
	private void generateNewNode() {
		IntRef offset = new IntRef();
		PCData current = getTextElement(offset);
		if(current == null) {
			throw new RuntimeException("Element is not a text one");
		}
		TextNode txt = new TextNode();
		PCData text = new PCData(" ");
		text.setParent(txt);
		txt.children().add(text);
		
		current.insert(txt, offset.value);
		caretPosition++;
		repaint();
	}
	
	private void removeCharAfter() {

	}
	
	private void removeCharBefore() {
		IntRef offset = new IntRef();
		PCData current = getTextElement(offset);
		if(current == null) throw new RuntimeException("Remove: not PCData");
		StringBuilder buffer = current.buffer();
		if(buffer.length() == 0 ||
			(buffer.length() == 1 && buffer.charAt(0) == ' '))
		{
			System.out.println("vuoto");
			current.getParent().removeFromParent();
			caretPosition--;
			repaint();
		} else {
			buffer.deleteCharAt(offset.value - 1);
			caretPosition--;
			repaint();
		}
	}
}
Nel costruttore c'è un "addKeyListener" che riconduce all'argomento di questo thread. Il KeyListener nel codice è "this".

keyTyped intercetta gli eventi di digitazione e passa la palla a processCharTyped il cui scopo è iniettare il carattere nel nodo PCData corrente;

keyPressed intercetta gli eventi di pressione e li passa a processKeyPressed che si occupa di gestire i pulsanti di "controllo";

keyRelesed non fa niente

Il tutto funziona insieme ad altre 23 classi che non incollo per pietà .

Ciao.

Pierluigi.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 20:23   #6
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
graie, di tutto, anche della pietà
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
AWS rinnova lo stack dell’IA: Trainium3,...
AWS entra nell'era degli agenti: il keyn...
Roscosmos: inventario a bordo della ISS ...
Arduino viene acquisita da Qualcomm e ca...
Un razzo spaziale Arianespace Vega C ha ...
Terra Next dà il via a Scale-Up P...
Il veicolo riutilizzabile ESA Space Ride...
Un Mousepad per mirare meglio: uno youtu...
Tokyo Electron sotto accusa: Taiwan cont...
L'ESA sta cercando alternative all'utili...
iliad TOP 250 PLUS e TOP 300 PLUS: valan...
FRITZ! a Sicurezza 2025: connessioni WiF...
I 18enni di oggi non fanno più la...
Super offerte Apple: iPhone 16e a 529€ e...
Torres EVT arriva in Italia con listino ...
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: 04:22.


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