Author Topic: Output di calcolo in una TextArea Swing  (Read 3878 times)

Offline Gas75

Output di calcolo in una TextArea Swing
« on: February 04, 2017, 05:48:14 PM »
Salve.
Ieri sono riuscito a costruire l'interfaccia grafica del mio primo programmino in Java, e ho anche assegnato a un button la semplice funzione di ripulire i TextField di input. Ora viene la parte difficile! ;D
Sono riuscito a incorporare il codice di esecuzione che già funzionava nel programma a riga di comando nel sorgente del JFrame, ma non riesco a fargli stampare l'output in una TextArea che ho creato apposta. Il problema principale è che, siccome il programma stampa un numero di righe variabile a seconda di un valore int immesso dall'utente, questa stampa in TextArea deve stare in un apposito ciclo for, ma in tale posizione il nome della TextArea non piace a NetBeans.

Sono partito da un costrutto di questo tipo:
Code: You are not allowed to view links. Register or Login
public class <name-of-class> extends JFrame
{  private JTextArea <name-of-textarea> = new TextArea(<optional-size-info>);

   public <name-of-class>()
   {  this.add(<name-of-textarea>);
      <name-of-textarea>.append(<text-to-display>);
   }
}
ma probabilmente non rispecchia il mio caso... Forse perché la JTextArea nel mio caso è definita nel private void initComponents() come
Code: You are not allowed to view links. Register or Login
OutputArea = new javax.swing.JTextArea();oltre che in coda al codice (non modificabile):
Code: You are not allowed to view links. Register or Login
private javax.swing.JTextArea OutputArea;Se commento this.add, non ho più errori secondo NetBeans, ma sulla console (non nella TextArea, poiché nel codice c'è il vecchio System.out.prinln per le eccezioni) visualizzo il messaggio previsto in caso valore immesso negativo, anche se lo immetto positivo.

Come posso orientarmi per risolvere?
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #1 on: February 04, 2017, 11:42:57 PM »
Credo di avere risolto :): il blocco di codice era giusto ma andava messo nell'ActionPerformed del JButton, non nel main della classe! ::)

Purtroppo ora succede un effetto strano: l'output avviene nella JTextArea, che però appare dietro il JTabbedPane che costituisce l'interfaccia grafica, e posizionato in alto a sinistra, lasciando un riquadro "disattivato" dove dovrebbe stare... :o
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #2 on: February 06, 2017, 06:13:12 PM »
Ho sistemato i vari oggetti swing in un layout di tipo Grid Bag, ma il problema persiste.
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline lynx

Re:Output di calcolo in una TextArea Swing
« Reply #3 on: February 06, 2017, 06:56:44 PM »
You are not allowed to view links. Register or Login
Credo di avere risolto :): il blocco di codice era giusto ma andava messo nell'ActionPerformed del JButton, non nel main della classe! ::)
e mi pare giusto :)

You are not allowed to view links. Register or Login
Purtroppo ora succede un effetto strano: l'output avviene nella JTextArea, che però appare dietro il JTabbedPane che costituisce l'interfaccia grafica, e posizionato in alto a sinistra, lasciando un riquadro "disattivato" dove dovrebbe stare... :o
Posta uno screenshot
trova le righe del "riquadro disattivato", forse hai scritto semplicemente qualche riga prima/dopo
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #4 on: February 06, 2017, 07:25:02 PM »
You are not allowed to view links. Register or Login
Risale a prima che inserissi il Grid Bag Layout, ma il risultato è identico...
Da quanto ho appena letto tra le API di Java, se ho capito bene, dovrebbe dipendere dal setViewportView, che dev'essere indicato in termini di X e Y, sennò il contenuto viene posizionato di default in alto a sinistra (X=0, Y=0), come in effetti succede a me.
Nel mio caso, il codice interessato, dovrebbe essere il seguente:
Code: You are not allowed to view links. Register or Login
OutputArea.setEditable(false);
OutputArea.setColumns(20);
OutputArea.setFont(new java.awt.Font("Monospaced", 0, 12));
OutputArea.setRows(5);
OutputArea.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jScrollPane1.setViewportView(OutputArea);
dove jScrollPane1 è il necessario "contenitore" della JTextArea OutputArea.
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #5 on: February 10, 2017, 12:11:29 PM »
Ho un aggiornamento circa il problema.
In sostanza, dopo la stampa dell'output, la JScrollPane collassa e le tre righe superiori occupano tutto lo spazio (in altezza) disponibile. Ho provato a impostare dei Weight Y, dando 40% allo JScrollPane e suddividendo il resto equamente tra gli altri oggetti, e dopo l'output questi ultimi si prendono tutta l'altezza, mentre la JTextArea torna visibile se azzero i contenuti dei vari campi, ma sempre spostata (di 29 pixel in alto, per la cronaca) rispetto al suo contenitore.
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline lynx

Re:Output di calcolo in una TextArea Swing
« Reply #6 on: February 10, 2017, 01:53:42 PM »
You are not allowed to view links. Register or Login
la JScrollPane collassa
Che in gergo significa?
Il debugger che dice?
Prova a stampare un output delle cordinate che inserisci (OutputArea)
Se ottieni 2 valori numerici puoi escludere questa ipotesi.
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #7 on: February 10, 2017, 03:10:24 PM »
Collassa nel senso che sparisce dalla GUI e gli altri swing si ripartiscono l'altezza disponibile.
Se svuoto i campi (textfield, checkbox e textarea) con un apposito button dedicato, ricompare la textarea ma in secondo piano rispetto agli altri oggetti e nella posizione dov'era finita stampando l'output.
Quote
Prova a stampare un output delle cordinate che inserisci (OutputArea)
Se ottieni 2 valori numerici puoi escludere questa ipotesi.
Non credo di avere capito... :(
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline lynx

Re:Output di calcolo in una TextArea Swing
« Reply #8 on: February 10, 2017, 04:08:10 PM »
Code: You are not allowed to view links. Register or Login
OutputArea.setEditable(false);
OutputArea.setColumns(20);
OutputArea.setFont(new java.awt.Font("Monospaced", 0, 12));
OutputArea.setRows(5);
OutputArea.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
jScrollPane1.setViewportView(OutputArea);
System.out.println( “ Le coordinate esistono e sono: “ + OutputArea);
Non conosco bene questo linguaggio, cerca di ottenere un output delle variabili per capire se esistono o se ci sono errori.
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #9 on: February 10, 2017, 04:23:15 PM »
Il debug non pare rilevare nulla se non l'avvio e la fine dell'esecuzione.
Ho stampato poi questa roba qua...
Code: You are not allowed to view links. Register or Login
javax.swing.JTextArea[,0,0,0x0,invalid,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,
border=javax.swing.plaf.synth.SynthBorder@1132ad42,flags=288,maximumSize=,minimumSize=,preferredSize=,caretColor=,
disabledTextColor=DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145,
editable=false,margin=java.awt.Insets[top=0,left=0,bottom=0,right=0],
selectedTextColor=DerivedColor(color=255,255,255 parent=nimbusSelectedText offsets=0.0,0.0,0.0,0 pColor=255,255,255,
selectionColor=DerivedColor(color=57,105,138 parent=nimbusSelectionBackground offsets=0.0,0.0,0.0,0 pColor=57,105,138,
colums=26,columWidth=0,rows=8,rowHeight=0,word=false,wrap=false]
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline lynx

Re:Output di calcolo in una TextArea Swing
« Reply #10 on: February 10, 2017, 07:12:48 PM »
You are not allowed to view links. Register or Login
Ho stampato poi questa roba qua...
se è l'output di OutputArea non funziona perché come dicevi tu stesso prima, vuole 2 valori numerici.
Quote from: Gas75
Da quanto ho appena letto tra le API di Java, se ho capito bene, dovrebbe dipendere dal setViewportView, che dev'essere indicato in termini di X e Y, sennò il contenuto viene posizionato di default in alto a sinistra (X=0, Y=0), come in effetti succede a me.
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #11 on: February 10, 2017, 08:21:05 PM »
Aspetta... L'output di OutputArea è corretto in base all'esecuzione del codice, quella lunga stringa è uscita nella console invocando il println che mi hai suggerito prima.
Del resto, anche assegnando i due valori, l'output avviene 29 pixel sopra il bordo superiore dell'area JScrollPane, il cui ruolo sembra essere puramente "grafico" dato che lo scroller funziona fintanto che la textarea è vuota. Inoltre se l'elaborazione richiede varie righe di risposta, la textarea "sparisce" e si vede il riquadro dello scrollpane con solo una fascia in basso bianca.

Nel frattempo sono riuscito a "bloccare" gli spostamenti degli oggetti swing dopo l'output (eccetto la textarea) attraverso i row weights.
Purtroppo la textarea non pare gestibile poiché dovrebbe starsene buona nello scrollpane e non prevede row weights.
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

Offline Gas75

Re:Output di calcolo in una TextArea Swing
« Reply #12 on: February 12, 2017, 03:29:05 PM »
Problema risolto.
L'errore era questo
Code: You are not allowed to view links. Register or Login
this.add(jScrollPane1);poiché add si riferisce a this che è il "contenitore principale" (il JFrame) e quindi appena il codice viene eseguito la textarea veniva erroneamente "reimparentata" col JFrame... Infatti l'errore iniziale vedeva la textarea intravedersi dietro le linguette del JTabbedPane, quindi nel JFrame.
Ci sono 10 tipi di persone: chi conosce il codice binario e chi no.
 

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40