Newsgroup: it.comp.java
Titolo: Strano problema con JTextArea su Linux (e non su Windows)

Ciao a tutti!
Mi capita questo problema quando eseguo su Linux Kubuntu
un'applicazione in Java che ho sviluppato.
Praticamente il codice è molto semplice ed è il seguente:
        JTextArea area = new javax.swing.JTextArea();
        JScrollPane scrollPane = new JScrollPane(area);
        scrollPane.setHorizontalScrollBarPolicy
(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        frame.add(area);
        frame.add(scrollPane);
Sotto Windows tutto funziona correttamente e infatti mano a mano che
il contenuto della JTextArea si riempie, compare la scrollbar
verticale che consente di visualizzare l'intero testo presente in
essa.
Su Linux invece è come se la JScrollPane nascondesse la JTextArea
infatti se eseguo il codice che vi ho postato, non compare nulla nel
frame dell'applicazione.
Se invece commento la riga "frame.add(scrollPane)", allora torna a
vedersi la JTextArea ma ovviamente senza le scrollbar necessarie.
A cosa può essere dovuto?
Anche voi avete avuto lo stesso problema nell'usare JScrollPane e
JTextArea su Linux?
Grazie per l'aiuto

         frame.add(scrollPane);
al frame devi aggiungere solo lo scrollpane che _contiene_ la jtextarea

 al frame devi aggiungere solo lo scrollpane che _contiene_ la jtextarea
Ho provato ma ancora non funziona.
Se tolgo la riga "frame.add(area)", il frame rimane tutto grigio e non 
compare la textArea.
Se tolgo la riga "frame.add(scrollPane)", la textArea si vede ma non � 
"scrollabile".
Se lascio entrambe le righe, il frame anche in questo caso rimane tutto 
grigio e non compare niente.
A questo punto mi sta venendo il dubbio che abbia sbagliato qualcosa nel 
codice, anche se � strano che su Windows funzioni tutto correttamente.
Per sicurezza vi posto il codice completo:
         JFrame frame = new javax.swing.JFrame("Frame");
         frame.setMinimumSize(new Dimension(920, 400));
         frame.setLocationRelativeTo(null);
         frame.setResizable(false);
         frame.setVisible(true);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         JTextArea area = new javax.swing.JTextArea();
         JScrollPane scrollPane = new JScrollPane(area);
         frame.add(area);
         frame.add(scrollPane);
         /*
          area.setEnabled(true);
         area.setMaximumSize(new Dimension(420, 200));
         area.setMinimumSize(new Dimension(420, 200));
         area.setVisible(true);
         area.setAutoscrolls(true);
         area.setEditable(false);
         area.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
          */
P.S.: le ultime righe ho provato a commentarle o decommentarle ma non 
cambia nulla.
Qualche aiuto?
--
Elminster

 frame.add(scrollPane);
Spero di non sbagliare, ma penso che intendesse che devi fare:
scrollPane.add(area);
frame.add(scrollPane);
Ciao
Marco

Marco ha scritto:

Grazieeeeeeee!!! :-)
In realt� ho risolto facendo:
         scrollPane.add(area);
         frame.add(area);
         frame.add(scrollPane);
Io avevo pensato che il costruttore "JScrollPane scrollPane = new 
JScrollPane(area)" facesse gi�, implicitamente, l'operazione di 
scrollPane.add(area).
Buono a sapersi, ancora grazie a entrambi per l'aiuto! :)
--
Elminster

 In realt� ho risolto facendo:
Mi correggo: il problema non era risolto come avevo erroneamente creduto.
Semplicemente a volte (quasi sempre) rimane tutto grigio, altre volte 
invece compare la TextArea correttamente e questa risulta scrollabile.
Negli ultimi 5 minuti ho provato a cliccare su "Clean and build" (a 
proposito: ma � davvero necessario su NetBeans cliccare prima di 
eseguire l'applicazione?) e poi su "Run" per un centinaio di volte.
Risultato: 5 o 6 volte tutto � comparso correttamente, le altre 95 no e 
il frame � rimasto completamente grigio.
Ora brancolo nel buio pi� di prima: vi viene in mente un possibile 
motivo che possa spiegare tutto ci�?
--
Elminster

          frame.add(scrollPane);
aggiungere al frame sia area sia scrollpane contenente area e' sbagliato
come ti ho gia' provato a dire. Il modo corretto e' questo:
JTextArea area = new javax.swing.JTextArea();
JScrollPane scrollPane = new JScrollPane(area);
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
frame.add(scrollPane);
in alternativa al costruttore che hai usato con gli scrollPane non devi
fare: 
scrollPane.add(area) 
ma 
scrollPane.setViewportView(area)
In ogni caso il costruttore che hai usato, internamente fa
setViewportView quindi dovrebbe essere equivalente.
dovresti postare un po' piu' di codice. possibilmente qualcosa di
compilabile che riproduce il problema.

 compilabile che riproduce il problema.
Questo è tutto e solo il codice del metodo main della mia
applicazione.
Su Linux Ubuntu con questo codice, 95 volte su 100 non si vede nulla,
5 volte su 100 compare tutto correttamente.
Su Windows compare tutto correttamente 100 volte su 100.
La JVM installata è la stessa. Vi viene in mente una spiegazione?
         JFrame frame = new javax.swing.JFrame("Frame");
         frame.setMinimumSize(new Dimension(920, 400));
         frame.setLocationRelativeTo(null);
         frame.setResizable(false);
         frame.setVisible(true);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         JTextArea area = new javax.swing.JTextArea();
         JScrollPane scrollPane = new JScrollPane(area);
         frame.add(scrollPane);
         area.setEnabled(true);
         area.setMaximumSize(new Dimension(420, 200));
         area.setMinimumSize(new Dimension(420, 200));
         area.setVisible(true);
         area.setAutoscrolls(true);
         area.setEditable(false);
         area.setCursor(Cursor.getPredefinedCursor
(Cursor.TEXT_CURSOR));
--
Elminster

          frame.setVisible(true);
il set visible lo devi fare dopo che hai composto l'interfaccia
quindi mettilo alla fine
se cambi l'interfaccia al volo dopo che l'hai resa visibile allora
bisogna fare altre operazioni per forzare il layout dei componenti ma
non e' il tuo caso

 quindi mettilo alla fine
Lo sai che ho risolto tutti i miei problemi mettendolo alla fine?
Sto per piangere... non so ancora se per la contentezza di aver risolto 
questo problema o per la disperazione di aver passato due giorni interi 
a cercare di risolverlo in altri modi! :'-)
Grazie di cuore! :-)
--
Elminster