Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
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


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Boeing Virtual Airplane, l'addestramento...
Tutte le funzioni satellitari in arrivo ...
NIU inaugura un nuovo store a Milano: ap...
Applicazioni Mission-Critical: alla scop...
PC portatile Lenovo tuttofare a 499€: or...
ECOVACS DEEBOT T80 OMNI vs T50 OMNI Gen2...
TV Hisense e TCL da 43'' (ma non solo): ...
Collins, "vibe coding" è...
Record di copie vendute per Red Dead Red...
Halo Infinite: in arrivo l'ultimo grande...
TV LG OLED 2025: Amazon fa sconti al che...
Forse, finalmente, ci siamo? Alcuni rumo...
Smart home più facile ed economic...
Motorola edge 50 neo in svendita, 202€: ...
Cina e Paesi Bassi verso la distensione ...
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: 10:55.


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