Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Hybrid View

  1. #1

    JTextArea stampa gli output ma... si sposta!

    Salve. Ho realizzato l versione JFrame di un programmino che riceve tre valori di input da console e ne restituisce in output quanti ne risultano da un ciclo for che è funzione del terzo dei tre valori immessi.

    Nel JFrame succede che l'input avviene attraverso tre JTextField, l'output in una JTextArea e l'esecuzione tramite un JButton con ActionPerformed...
    Stranamente nel momento in cui vengono stampati i risultati, la JTextArea finisce dietro il JTabbedPane che compone il JFrame (i risultati si intravedono), e spostato in alto a sinistra, lasciando un riquadro vuoto nella posizione dove dovrebbe trovarsi...

    Come posso fissare la JTextArea nella posizione scelta?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Stranamente nel momento in cui vengono stampati i risultati, la JTextArea finisce dietro il JTabbedPane che compone il JFrame (i risultati si intravedono), e spostato in alto a sinistra, lasciando un riquadro vuoto nella posizione dove dovrebbe trovarsi...
    È un po' vago .... bisognerebbe vedere il codice, valutare se e come quale/i layout manager hai usato, come sono disposti i componenti, ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Sto usando NetBeans 8.1, ho scelto un layout Free Design perché quelli che ho provato vincolavano la disposizione degli elementi swing...
    Qui c'è una schermata che dovrebbe riassumere il problema.
    http://studiotecnico75.altervista.or..._JTextArea.jpg

    Per quanto riguarda il codice, è lunghetto cosa serve sapere? Subito posso dirti che la JTextArea ha come Accessible Parent il jScrollPane, il quale ha il jPanel1 che a sua volta ha l'unico JTabbedPane presente nel JFrame.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    ho scelto un layout Free Design perché quelli che ho provato vincolavano la disposizione degli elementi swing...
    Sì, i vari layout manager hanno ciascuno caratteristiche e vincoli peculiari. Ma sono proprio queste peculiarità che vanno sfruttate (e tipicamente "inscatolando" insieme più contenitori con layout manager differenti) per realizzare interfacce grafiche più flessibili.

    La tua interfaccia non si può adattare facilmente a Look&Feel differenti, non è di per sé ridimensionabile (servirebbe molto più codice "a mano") e inoltre la manutenzione sul codice è sicuramente più difficile/impossibile (non oso ... non voglio immaginare il codice generato dal IDE ...).
    E se andiamo un pelino oltre, a livello object-oriented, è bene dire che se hai pannelli distinti per le varie "schede" del tabbed pane, sarebbe buono definire ciascun pannello proprio come classe separata, ben incapsulata e (magari, se dovesse servire) facilmente riutilizzabile. Invece il tuo IDE probabilmente ha fatto una unica mega-classe in cui ha messo tutto quanto dentro. E questo perché a livello di queste scelte di "design" object-oriented un editor "visuale" non solo NON ti aiuta affatto ma probabilmente ti mette solo i classici bastoni tra le ruote.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Qui c'è una schermata che dovrebbe riassumere il problema.
    http://studiotecnico75.altervista.or..._JTextArea.jpg

    Per quanto riguarda il codice, è lunghetto cosa serve sapere? Subito posso dirti che la JTextArea ha come Accessible Parent il jScrollPane, il quale ha il jPanel1 che a sua volta ha l'unico JTabbedPane presente nel JFrame.
    Senza vedere il codice non ne so molto più di prima ..... mi verrebbe solo un dubbio: non è che a runtime il JTextArea viene spostato di "parente"?? Se sì, il problema è quello.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    se hai pannelli distinti per le varie "schede" del tabbed pane, sarebbe buono definire ciascun pannello proprio come classe separata
    Sono reduce da un corso Java livello Base svolto con NetBeans, e mi sono affidato a questo software per fare evolvere il mio programma da console verso un'interfaccia grafica: ho visto una serie di oggetti trascinabili e ho composto l'interfaccia come ritengo sia più funzionale, non mi sono posto particolari problemi a monte...
    Purtroppo con NetBeans non so quanto sia possibile creare una classe per ogni scheda del Tabbed Pane, visto che per usare l'interfaccia grafica guidata devo scegliere un JFrame e non una Java Class...
    non è che a runtime il JTextArea viene spostato di "parente"?? Se sì, il problema è quello.
    Ci ho pensato anche io, ma dove lo vado a vedere se è così? A me risulta JTextArea imparentata con jScrollPane1, e così via secondo il Navigator che si vede nella schermata allegata stamattina.

  6. #6
    Ho inserito tutti gli oggetti swing in un Grid Bag Layout (e in effetti la JTextArea aveva un padding altissimo), ma il problema persiste...
    Ultima modifica di Gas75; 06-02-2017 a 19:04

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Ho inserito tutti gli oggetti swing in un Grid Bag Layout (e in effetti la JTextArea aveva un padding altissimo), ma il problema persiste...
    Per quanto hai detto (e mostrato in screenshot) finora, a me la prima (e unica, al momento) cosa che mi verrebbe in mente è che il JTextArea viene per qualche motivo "ri-parentato" da qualche altra parte, causando ovviamente la rimozione dal JScrollPane.

    Ma senza vedere in dettaglio il codice, non potrei né confermare questa ipotesi, né saperne più di prima.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Da quanto ho appena letto tra le API di Java, 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).
    Nel mio caso il codice interessato, credo sia questo:
    codice:
    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.
    Solo che non so come passare i parametri di posizione della JTextArea...

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    codice:
    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.
    No, non è questo il punto problematico. Quello che hai scritto qui è tutto tecnicamente corretto (salvo il fatto che per il 2° parametro di Font() sarebbe meglio usare i nomi di costanti in Font come Font.PLAIN che è appunto 0).

    setViewportView imposta solo il componente da scrollare, quello che appunto è inteso come "view".

    Fare:

    jscrollPane = new JScrollPane(componenteDaScrollare);

    oppure

    jscrollPane = new JScrollPane();
    jscrollPane.setViewportView(componenteDaScrollare);


    è la STESSA cosa e sono entrambi modi corretti.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Solo che non so come passare i parametri di posizione della JTextArea...
    Sul componente da scrollare, NON c'è nulla da impostare riguardo posizione/dimensione. Ci pensa JScrollPane (per essere più precisi il JViewport interno a JScrollPane) a disporre appropriatamente il componenteDaScrollare.


    E alla fine ..... siamo (almeno per me che leggo) allo stesso punto di prima.
    Ultima modifica di andbin; 06-02-2017 a 21:47
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sul componente da scrollare, NON c'è nulla da impostare riguardo posizione/dimensione. Ci pensa JScrollPane (per essere più precisi il JViewport interno a JScrollPane) a disporre appropriatamente il componenteDaScrollare.
    JViewport pare non esserci proprio nel mio codice.
    Nelle Properties del JScrollPane c'è un viewport (ora in <default>), dove posso scegliere tra "Value from existing component" oppure "Custom code".
    C'è anche un viewportBorderBounds, attualmente settato (in automatico o a seguito di qualche trascinamento per mettere in ordine gli oggetti) su [1, 1, -2, -2]...

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.