|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 149
|
Spero tanto che qualcuno riesca a darmi una dritta entro domani sera
|
|
|
|
|
|
#3 |
|
Senior Member
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 |
|
|
|
|
|
#4 | |
|
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:
Ora mi leggo la guida che mi hai dato Ultima modifica di Van47 : 03-02-2013 alle 12:58. |
|
|
|
|
|
|
#5 |
|
Senior Member
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");
}
}
- 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");
}
}
__________________
In God we trust; all others bring data |
|
|
|
|
|
#6 |
|
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. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
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 |
|
|
|
|
|
|
#8 |
|
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? |
|
|
|
|
|
#9 |
|
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?
|
|
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 149
|
No, nella fretta ho premuto prima la i della u
|
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 149
|
Per caso mi sai dare anche una dritta per il mio problema?
|
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Nonsi, mi dispiace. Di Java non me ne intendo.
![]() Segui i consigli di Sottovento |
|
|
|
|
|
#15 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 149
|
Peccato
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
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 |
|
|
|
|
|
|
#17 |
|
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?
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#19 |
|
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... |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
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 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:55.





















