Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-02-2013, 16:16   #1
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
[JAVA] Come si visualizza del testo alle coordinate (x, y) dentro una nuova finestra?

Ciao a tutti, volevo chidere il vostro aiuto per riuscire a visualizzare stringhe, alle coordinate desiderate, all'interno di una nuova finestra.
Esattamente che classi devo usare?


P.s. Nei miei primi tentativi ho provato ad aprire la nuova finestra con jframe, ed in seguito a fare un add di una jlabel con del testo scritto... Ammetto che ho fatto un fatica bestia per riuscire anche solo a far comparire la stringa (ogni volta che voglio aggiornare la finestra devo usare il comando <oggettoJFrame>.setVisible(true);??? Perchè ho notato che altrimenti non compare nulla nella finestra...) quindi se mi spigaste anche che metodi delle classi usare per avere un controllo di base su quello che faccio ve ne sarei davvero grato...

Grazie in anticipo
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 02:42   #2
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Spero tanto che qualcuno riesca a darmi una dritta entro domani sera
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 08:57   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Probabilmente non hai ancora ricevuto risposta perche' la domanda non e' proprio chiara.

Dalla prima frase, sembrerebbe che tu voglia disegnare all'interno di una finestra. In tal caso, per esempio potresti creare una sottoclasse di una JFrame e ridefinire il metodo paint(Graphics g). Avresti quindi a disposizione i metodi drawString().

Nel P.s. invece sembra che la tua intenzione sia creare una HMI. In tal caso non e' necessario "disegnare" come detto precedentemente, ma occorre usare per esempio Swing per creare l'interfaccia grafica di tuo gradimento con scritte, bottoni, menu e quant'altro.

Normalmente gli sviluppatori Java, in questo caso, non posizionano gli elementi fornendone le coordinate ma utilizzando dei "layout", cioe' degli oggetti invisibili usati solo per il posizionamento dei controlli sulla finestra.
Ovviamente puoi anche disabilitare questo modo di operare e posizionare i tuoi controlli "a mano" (i.e. mediante coordinate) ma tale sistema e' raramente utilizzato in java.

Ho risposto alla tua domanda? In caso affermativo e nel caso voglia saperne di piu', puoi guardare il tutorial di PGI-Bis (che sarebbe bello rivedere) su questo forum:

http://www.hwupgrade.it/forum/showthread.php?t=2005654
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 12:35   #4
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Innanzitutto grazie per la risposta.
Chiedo scusa per come ho posto la domanda, purtroppo a causa della mia ingoranza sull'argomento non sono riuscito a spiegarmi correttamente

Quello che devo fare è:

1) Aprire una nuova finestra.
2) Utilizzare questa finestra come output su schermo.
3) Le stringhe dovranno comparire a coordinate specifiche all'interno della finestra.

Spero si capisca meglio, grazie mille del tuo tempo

Precisamente sono interessato a questo, fra i vari esempi che mi hai esposto:
Quote:
Ovviamente puoi anche disabilitare questo modo di operare e posizionare i tuoi controlli "a mano" (i.e. mediante coordinate) ma tale sistema e' raramente utilizzato in java.
Ma il mio intento non è creare un'interfaccia utente (niente controlli, bottoni, ecc), ma solo far comparire informazioni nella finestra sotto forma di testo.

Ora mi leggo la guida che mi hai dato

Ultima modifica di Van47 : 03-02-2013 alle 12:58.
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 13:24   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Se vuoi utilizzare una finestra come una console
- potresti usare la "solita" System.out.println() cosi' da fare output in formato test;
- Potresti aprire un JFrame, inserirvi una JTextArea che tenga tutta la finestra ed appendere le scritte che ti servono, per esempio:

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

class MyConsole extends JFrame
{
    private JTextArea ta;

    public MyConsole()
    {
        setSize(800, 600);
        setTitle("My console");
        buildGUI();
    }

    private void buildGUI()
    {
        ta = new JTextArea();
        getContentPane().add(new JScrollPane(ta), BorderLayout.CENTER);
    }

    public void print (String str)
    {
        ta.append(str);
    }

    public void println(String str)
    {
        ta.append (str + "\n");
    }

    public static void main(String[] args)
    {
        MyConsole myConsole = new MyConsole();
        myConsole.setVisible(true);
        myConsole.println ("Ciao da sottovento");
        myConsole.println ("Oggi e' il mio compleanno");
    }
}
NOTA - questo e' solo un esempio scritto in 2 secondi. La qualita' e' quella di un esempio scritto in 2 secondi. Serve solo a rendere l'idea

- Se proprio vuoi sempre scrivere alla stessa posizione, allora fai cosi':

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

class MyConsole extends JFrame
{
    private String message;

    public MyConsole()
    {
        message = null;
        setSize(800, 600);
        setTitle("My console");
    }

    public void print (String str)
    {
        message = str;
        repaint();
    }

    public void paint(Graphics g)
    {
        Graphics2D g2d = (Graphics2D)g;
        if (message != null)
            g2d.drawString(message, 100, 100);
    }

    public static void main(String[] args)
    {
        MyConsole myConsole = new MyConsole();
        myConsole.setVisible(true);
        myConsole.print ("Ciao da sottovento");
    }
}
NOTA - questo e' solo un esempio scritto in 2 secondi. La qualita' e' quella di un esempio scritto in 2 secondi. Serve solo a rendere l'idea
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 14:12   #6
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Ok, credo che ci siamo quasi...
Quindi con il tuo secondo esempio posso far comparire una stringa sempre nelle specifiche coordinate(100, 100) della finestra...
Ma se io avessi bisogno di far comparire diverse stringhe in diverse posizioni specifiche di questa finestra?

P.S. Sempre nel tuo secondo esempio, nel metodo print(String str)
invochi il metoto repaint(), è un errore? volevi richiamare il paint poco sotto?


Non sai quanto ti sono grato del tuo aiuto!

P.S.2 Il metodo paint prende un oggetto graphics come parametro esplicito, come si crea quell'oggetto?

Ultima modifica di Van47 : 03-02-2013 alle 14:17.
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 14:50   #7
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Van47 Guarda i messaggi
Ok, credo che ci siamo quasi...
Quindi con il tuo secondo esempio posso far comparire una stringa sempre nelle specifiche coordinate(100, 100) della finestra...
Ma se io avessi bisogno di far comparire diverse stringhe in diverse posizioni specifiche di questa finestra?

P.S. Sempre nel tuo secondo esempio, nel metodo print(String str)
invochi il metoto repaint(), è un errore? volevi richiamare il paint poco sotto?


Non sai quanto ti sono grato del tuo aiuto!

P.S.2 Il metodo paint prende un oggetto graphics come parametro esplicito, come si crea quell'oggetto?

Il secondo esempio serve appunto per disegnare. Il testo e' disegnato alle coordinate indicate. Sei *veramente* sicuro che ti serve quella soluzione?
Non e' quella usuale per trattare il testo, normalmente si usa la prima.

Il repaint() non e' un errore. Infatti il metodo paint() viene chiamato dal Java quando e' necessario ridisegnare la finestra (o una sua porzione) per i motivi piu' disparati. repaint() forza il ridisegno. Era necessario poiche' Java non puo' sognarsi che ho cambiato una stringa e che essa deve essere ridisegnata.

L'oggetto Graphics in questo caso e' creato da Java e passato al momento del ridisegno.

Nel caso voglia usare questa strada, e debba far apparire piu' stringhe, e' probabile che vorrai fare in modo che non si sovrappongano.
In tal caso ti conviene usare la class FontMetrics.
La puoi ottenere dall'oggetto Graphics2D, per esempio
FontMetrics fm = g2d.getFontMetrics();
Questo oggetto contiene tutte le informazioni, per esempio, per poter andare a capo correttamente (incrementando per esempio la y di una quantita' pari a fm.getHeight()).
Puoi anche ottenere la lunghezza di una stringa, per esempio con
lunghezza = fm.stringWidth("mia stringa")
cosi' da sapere quanto occupera' a schermo.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 15:14   #8
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Effettivamente utilizzare le stringhe come oggetti grafici sembra un po' macchinoso...
Il problema è che nel primo esempio che mi hai fatto non posso sistemare le stringhe dove voglio, invece io ho bisogno che appaiano a coordinate da me decise, non mi interessa un controllo sulle sovrapposizioni, se mai ci fosse questo problema mi basterebbe cambiare le coordinate, giusto?
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 15:48   #9
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Ho letto tutta la giuda che mi hai indicato, dimmi se è giusto questo procedimento: creo una nuova finestra con un layout che la divide orizzontalmente in 2 semplici parti, nella parte sopra aggiungo un oggetto jLabel, nella parte sotto aggiungo un componente JTable che posso riempire riga a riga con stringhe per mezzo di un ciclo for... Posso farlo?
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 16:10   #10
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Van47 Guarda i messaggi
Ho letto tutta la giuda che mi hai indicato, dimmi se è giusto questo procedimento: creo una nuova finestra con un layout che la divide orizzontalmente in 2 semplici parti, nella parte sopra aggiungo un oggetto jLabel, nella parte sotto aggiungo un componente JTable che posso riempire riga a riga con stringhe per mezzo di un ciclo for... Posso farlo?
Si tratta di una qualche guida traditrice?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 16:19   #11
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
No, nella fretta ho premuto prima la i della u
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 16:53   #12
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Van47 Guarda i messaggi
No, nella fretta ho premuto prima la i della u
Si lo so, si capisce benissimo che si tratta di un errore di distrazione dovuto alla fretta.

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 17:04   #13
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Per caso mi sai dare anche una dritta per il mio problema?
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 17:15   #14
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Nonsi, mi dispiace. Di Java non me ne intendo.



Segui i consigli di Sottovento
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 17:21   #15
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Peccato
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 17:54   #16
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Van47 Guarda i messaggi
Ho letto tutta la giuda che mi hai indicato, dimmi se è giusto questo procedimento: creo una nuova finestra con un layout che la divide orizzontalmente in 2 semplici parti, nella parte sopra aggiungo un oggetto jLabel, nella parte sotto aggiungo un componente JTable che posso riempire riga a riga con stringhe per mezzo di un ciclo for... Posso farlo?
Si, puoi farlo ma e' difficile.
Forse hai dato pochi dettagli del tuo progetto, ma mi sembrava che il problema fosse solo quello di visualizzare qualche scritta.
A questo punto, invece della JTable potresti usare la JTextArea come ho fatto nell'esempio che ti ho dato, cosi' da accodare semplicemente le stringhe che vuoi mandare a schermo. Anche se lo puoi fare con una JTable, non mi sembra proprio l'oggetto indicato.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 18:08   #17
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
All'inizio il mio obbiettivo era di trovare un modo per far comparire varie stringhe in vari punti specifici della finestra, ma dato che, a quanto ho capito, non è possibile farlo con un semplice metodo che mi chieda le coordinate per l'inserimento della stringa, l'unico modo per farlo è usare un layout che suddivida la finestra in varie porzioni di pixel da riempire ognuno con un oggetto di tipo jLabel, giusto?
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 19:22   #18
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Van47 Guarda i messaggi
All'inizio il mio obbiettivo era di trovare un modo per far comparire varie stringhe in vari punti specifici della finestra, ma dato che, a quanto ho capito, non è possibile farlo con un semplice metodo che mi chieda le coordinate per l'inserimento della stringa, l'unico modo per farlo è usare un layout che suddivida la finestra in varie porzioni di pixel da riempire ognuno con un oggetto di tipo jLabel, giusto?
Si, mi sembra una buona soluzione, e facile da realizzare.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2013, 00:34   #19
Van47
Member
 
Iscritto dal: Dec 2006
Messaggi: 149
Fantastico! Confermo che il risultato è perfetto!
Ti ringrazio tantissimo!

Posso farti un'altra domanda? Come si fa a ricevere un input da tastiera (un singolo tasto, senza dover premere invio) nella mia finestra JFrame?

Premetto che ho letto la guida, ma non riesco a capire quele sia il metodo più semplice per farlo...
Van47 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2013, 05:00   #20
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Van47 Guarda i messaggi
Fantastico! Confermo che il risultato è perfetto!
Ti ringrazio tantissimo!

Posso farti un'altra domanda? Come si fa a ricevere un input da tastiera (un singolo tasto, senza dover premere invio) nella mia finestra JFrame?

Premetto che ho letto la guida, ma non riesco a capire quele sia il metodo più semplice per farlo...
Ogni Component ha un metodo che si chiama addKeyListener() a cui si passa un listener, cioe' una classe che implementa l'interfaccia KeyListener.
Ogni qualvolta che un tasto verra' premuto, l'evento(i) corrispondente verra' inviato al key listener di default, i.e. quello che ha il focus al momento della pressione del tasto.

Questo e' quanto ti serve per poter implementare quello che vuoi fare
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
Le feste non placano Amazon, anzi: aggio...
Roborock Q10 S5+ a un super prezzo: robo...
Formula sceglie WINDTRE BUSINESS per gar...
EXPO 1.20: AMD migliora il supporto all'...
MacBook Pro con chip M4, 24GB di RAM e 1...
Lefant M330 da 6.000Pa a 139€ o ECOVACS ...
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: 00:04.


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