Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Problema casella di testo

    Allora...
    Devo creare una casella di testo con del testo che vada a capo ma che sia anche centrato orizzontalmente e verticalmente, e che possa andare a capo.
    Se uso una JTextArea non riesco a centrare verticalmente il testo, se uso un JTextField non riesco a far andare a capo, e i JTextPane non li so usare...
    Ho provato a cercare online ma non ho trovato risposte, forse cerco la cosa sbagliata...
    Grazie.

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

    Re: Problema casella di testo

    Originariamente inviato da Kaamos
    Se uso una JTextArea non riesco a centrare verticalmente il testo
    Centrare verticalmente il testo dentro il componente di testo, no non puoi, con nessuno dei componenti di testo (salvo forse qualche barbatrucco che bisognerebbe provare).
    Quello che si potrebbe fare (e anche qui sarebbe da testare) è fare in modo che il componente di testo sia dentro il layout di un certo contenitore tale per cui il componente di testo stesso sia tenuto nel layout centrato verticalmente.
    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
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Re: Problema casella di testo

    Originariamente inviato da andbin
    Centrare verticalmente il testo dentro il componente di testo, no non puoi, con nessuno dei componenti di testo (salvo forse qualche barbatrucco che bisognerebbe provare).
    Quello che si potrebbe fare (e anche qui sarebbe da testare) è fare in modo che il componente di testo sia dentro il layout di un certo contenitore tale per cui il componente di testo stesso sia tenuto nel layout centrato verticalmente.
    Eh, però non trovo nessun layout che faccia al caso mio, sto ancora cercando... ho visto online un codice dove viene creato un nuovo layout manager con una pappardella lunga di codice, speravo ci fosse un modo più semplice...
    EDIT: ho provato con BorderLayout e CENTER ma non mi funzionano...
    RIEDIT: ah già, ovvio. L'area di testo è grande come il suo contenitore.

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

    Re: Re: Re: Problema casella di testo

    Originariamente inviato da Kaamos
    Eh, però non trovo nessun layout che faccia al caso mio
    Ce ne sono che possono tenere un componente centrato verticalmente!
    GridBagLayout o un BoxLayout che contiene un "glue" (es. Box.createVerticalGlue() ) poi il componente, poi un altro "glue".

    Originariamente inviato da Kaamos
    ho visto online un codice dove viene creato un nuovo layout manager con una pappardella lunga di codice
    No, non serve creare alcun nuovo layout manager!

    Originariamente inviato da Kaamos
    speravo ci fosse un modo più semplice...
    EDIT: ho provato con BorderLayout e CENTER ma non mi funzionano...
    RIEDIT: ah già, ovvio. L'area di testo è grande come il suo contenitore.
    Le possibilità ci sono ma dovresti avere una "visione" più ampia e generale dei layout manager. (non è per criticare! intendiamoci).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Re: Re: Re: Problema casella di testo

    Originariamente inviato da andbin
    Ce ne sono che possono tenere un componente centrato verticalmente!
    GridBagLayout o un BoxLayout che contiene un "glue" (es. Box.createVerticalGlue() ) poi il componente, poi un altro "glue".

    No, non serve creare alcun nuovo layout manager!

    Le possibilità ci sono ma dovresti avere una "visione" più ampia e generale dei layout manager. (non è per criticare! intendiamoci).
    Proverò con ciò che hai detto, grazie.
    Tranquillo poi, so che di grafica sono agli inizi, è il primo programma "serio" (insomma, non il solito esercizietto scolastico che ho fatto fin'ora) e sto ancora cercando di capirci fra questi layout manager e compagnia, critiche assolutamente ben accette.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Uhm, ho provato a cercare online ma non ci ho capito molto, più che altro non mi visualizza più la casella di testo. Avevo trovato questa roba qui online:
    http://www.java2s.com/Code/Java/Swing-JFC/UsingGlue.htm
    Quindi ho creato un box verticale, l'ho messo dentro ad una JLabel, e al box ho aggiunto una verticalGlue, la JTextArea e un'altra verticalGlue. Dove sbaglio? :master:

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Kaamos
    Quindi ho creato un box verticale, l'ho messo dentro ad una JLabel
    Dentro JLabel non avrebbe molto senso mettere dei componenti.

    Originariamente inviato da Kaamos
    al box ho aggiunto una verticalGlue, la JTextArea e un'altra verticalGlue. Dove sbaglio?
    Piccola questione: BoxLayout rispetta anche il "maximum size" dei componenti. E una JTextArea ha un maximum size che è il massimo possibile.
    Estendi JTextArea e fai l'override di getMaximumSize() per far ritornare ciò che fornisce getPreferredSize().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da andbin
    Piccola questione: BoxLayout rispetta anche il "maximum size" dei componenti. E una JTextArea ha un maximum size che è il massimo possibile.
    Estendi JTextArea e fai l'override di getMaximumSize() per far ritornare ciò che fornisce getPreferredSize().
    Ehm... potresti (o tu o chi altro) farmi vedere uno spezzone di codice?
    Comunque ancora grazie.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class TestFrame extends JFrame {
        public TestFrame() {
            super("Test");
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(300, 200);
    
            JTextArea textArea = new MyTextArea();
            textArea.setText("Prima riga del testo\nSeconda riga\nTerza riga");
    
            Box box = new Box(BoxLayout.Y_AXIS);
            box.add(Box.createVerticalGlue());
            box.add(textArea);
            box.add(Box.createVerticalGlue());
    
            JScrollPane scrollPane = new JScrollPane(box);
    
            getContentPane().add(scrollPane);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new TestFrame().setVisible(true);
                }
            });
        }
    }
    
    class MyTextArea extends JTextArea {
        public Dimension getMaximumSize() {
            return getPreferredSize();
        }
    }
    Prova a scrivere del testo, vedrai che la text area si espande (ma resta centrata) e se si espande troppo compaiono le scrollbar.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.