Visualizzazione dei risultati da 1 a 8 su 8

Discussione: jScrollTextArea

  1. #1
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    jScrollTextArea

    Salve, ho fatto una ricerca sul questo forum e ho trovato questa discussione:
    http://forum.html.it/forum/showthread/t-1035892.html
    il problema è che a me non va...non mostra proprio la textarea
    codice:
    private class JTextScrollArea extends JTextArea
    		{
    		    private JScrollPane scrollPane;
    
    		    public JTextScrollArea ()
    		    {
    		        scrollPane = new JScrollPane (this, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    		    }
    
    		    public JScrollPane getScrollPane ()
    		    {
    		        return scrollPane;
    		    }
    		}
    che richiamo così:
    formTesto = new JTextScrollArea();
    formTesto.setBounds(riga.getPreferredSize().width-410, 4, 400, 200);
    riga.add(formTesto.getScrollPane());
    ma anche eliminando setBounds non visualizza nulla...why?

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: jScrollTextArea

    Originariamente inviato da oronze
    formTesto = new JTextScrollArea();
    formTesto.setBounds(riga.getPreferredSize().width-410, 4, 400, 200);
    riga.add(formTesto.getScrollPane());
    ma anche eliminando setBounds non visualizza nulla...why?
    Perché il setBounds() devi farlo sullo scrollpane!!!! È quello che aggiungi al tuo contenitore 'riga'!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    Re: Re: jScrollTextArea

    Originariamente inviato da andbin
    Perché il setBounds() devi farlo sullo scrollpane!!!! È quello che aggiungi al tuo contenitore 'riga'!
    Ok...chiarissimo come sempre ma perchè quì non va allora?
    codice:
    content.add(titolo, BorderLayout.NORTH);
    content.add(body, BorderLayout.CENTER);
    		
    JScrollPane scrollPane = new JScrollPane(content, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    				
    programma.setLayout(new BorderLayout());
    programma.getContentPane().add(scrollPane);
    dove content è un JPanel che contiene altri 2 JPanel....titolo e body mentre programma è un JFrame. Tutto si visualizza correttamente ma se body sborda dalla finestra le scroll rimangono inattive e non permettono di scorrere il contenuto...cosa sbaglio ora?

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  4. #4
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    uppolo

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  5. #5
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    diciamo che ho risolto ma ora il componente principale occupa l'intera linea...come faccio ad impostare una dimensione fissa?
    codice:
    	programma = new JFrame("Frame");
    	programma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			
    	//INIZIO CREAZIONE MENUBAR
    	JMenuItem item;
    	JMenuBar menu = new JMenuBar();
    	JMenu progetto = new JMenu("Progetto");
    [...]
    	programma.setJMenuBar(menu);
    
    	//INIZIO CREAZIONE E POSIZIONAMENTO CONTENT PANE
    	JPanel content = new JPanel(new BorderLayout());
    
    	//setto e personalizzo il titolo
    	JPanel titolo = new JPanel();
    	labTitolo = new JLabel("titolo");
    	titolo.add(labTitolo);
    					
    	//setto il body
    	flow.setAlignment(FlowLayout.CENTER);
    	body = new JPanel(flow);
    	labContenuto = new JLabel("Testo");
    	body.add(labContenuto);
    
    
    	content.add(titolo, BorderLayout.NORTH);
    	content.add(body, BorderLayout.CENTER);
    
    	JScrollPanel container = new JScrollPanel();
    	container.add(content);
    			
    	programma.setLayout(new BorderLayout());
    	programma.getContentPane().add(container.getScrollPane());
    	programma.setSize(screen.width-screen.width/16, screen.height/2);
    	programma.setVisible(true);
    questo è il mio layout...il problema è che body resta sempre su un'unica linea senza mai andare a capo...ho provato mettendo sia
    body.setPreferredSize(programma.getSize());
    che
    container.setPreferredSize(programma.getSize());
    che
    container.getScrollPane().setPreferredSize(program ma.getSize());
    ma non cambia nulla...anzi, nel primo caso non visualizza nulla...come lo risolvo?
    Please, help me

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da oronze
    il problema è che body resta sempre su un'unica linea senza mai andare a capo...
    Lo so ... ma dovresti comprendere meglio come funzionano i layout manager. E ti consiglio di leggere (se non l'hai già fatto) questo: Effective Layout Management: Short Course

    Ricapitoliamo: hai questa struttura (solo le parti di interesse):
    codice:
    JScrollPane
      \
       JPanel (con BorderLayout)
         \
          JPanel in CENTER (con FlowLayout)
            \
             JLabel
    Ora: JScrollPane deve conoscere la dimensione del contenuto, ovviamente. Come lo fa? Visto che JPanel non implementa Scrollable, si basa sul preferred size del JPanel contenuto. La altezza per ora non interessa, solo il "width".

    E quale è il preferred width di un BorderLayout? È il massimo tra le larghezze di NORTH, WEST+CENTER+EAST e SOUTH.
    E quale è il preferred width della parte CENTER che contiene un FlowLayout? Per FlowLayout il preferred width è la somma dei preferred width di tutti i componenti + eventuali hgap ... quindi in pratica 1 sola riga!!! Non fluisce!!

    Soluzioni? Beh, non è per nulla banale!!! Puoi impostare un certo preferred size per il panel che ha il FlowLayout. Questo però vuol solo dire che "fluisce" sul preferred width impostato .... non che fluisce secondo la larghezza della "vista" del scroll pane!!!

    Ripeto che non è banale!! Dovrei studiarci e documentarmi un pochino.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    allora...innanzitutto grazie...
    ora rileggo quello che hai scritto con mooooooooooolta attenzione che così mi pare un po' un casino...quel link me lo studio (ho solo letto il capitolo dedicato a SWING su un libro di testo) e spero di risolvere in una qualche maniera

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  8. #8
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    la tua descrizione è stata illuminante..era ciò che mi serviva! dopo un oretta di studio e prove sono arrivato alla conclusione...allora...mi è bastato impostare la dimensione al body...posto la soluzione magari servirà ad altri...ricordo che body è il flowlayout
    codice:
    private int getAltezzaComponenti(){
    	int altezza=0;
    	Component[] ic = body.getComponents();
    	for(Component c:ic){
    		altezza+=5;
    		altezza+=c.getPreferredSize().height;
    	}
    	return altezza;
    }
    
    [...]
    
    body.setPreferredSize(new Dimension(programma.getSize().width-programma.getSize().width/16, getAltezzaComponenti()));
    ho scritto una funzione poichè, quando modifico il contenuto di body, dopo aver aggiunto tutti i componenti, prima del body.validate(); richiamo il setPreferredSize


    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

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.