Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207

    [JAVA] allineare testo di una tab a sinistra

    qualcuno sa come si allinea il titolo di una tab a sinistra?

    grazie..

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

    Re: [JAVA] allineare testo di una tab a sinistra

    Originariamente inviato da jin85
    qualcuno sa come si allinea il titolo di una tab a sinistra?
    Precisiamo: intendi il testo sull'header di una colonna in una JTable?
    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
    Apr 2008
    Messaggi
    207
    scusami, mi sono espresso male..volevo sapere come allineare il testo di ogni singola tab di un jtabbedpane. ti posto l'immagine




    i nomi che vedi sulla sinistra come faccio ad allinearli tutti a sinistra?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da jin85
    scusami, mi sono espresso male..volevo sapere come allineare il testo di ogni singola tab di un jtabbedpane.
    Ah ok ... sì avevo pensato anche a quello ma avevo il dubbio.

    L'unica cosa che ti posso dire è che da Java 6 la classe JTabbedPane ha i metodi setTabComponentAt() e getTabComponentAt().

    Non li ho mai usati, quindi non ti so dire di preciso. Magari puoi provare a fare un "esperimento": istanzia che so ... un JLabel, impostagli il testo e un allineamento a sinistra, quindi usa setTabComponentAt() per assegnare il componente.

    Purtroppo ora non ho tempo di provare ... se provi dimmi poi cosa salta fuori.
    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
    Apr 2008
    Messaggi
    207
    il problema è questo...io carico quei nomi nelle tab tramite un ciclo, poichè li prendo da un file xml...al momento del caricamento quei nomi x me non sono delle JLabel, ma String.

    codice:
    for (int i=0; i<listamedici.size();i++){
    	                	 
    	                	 Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe);
    	         			 PannelloFrame.setSize(this.getSize());
    	                	 String nomcognom =listamedici.get(i).getNominativo();
    	                	 //tabbedPane.setAlignmentX(Component.LEFT_ALIGNMENT);
    	                	 tabbedPane.addTab(nomcognom,PannelloFrame);
    	                	 String PanneloFrame = PannelloFrame+"i";
    	                 }
    come vedi quando faccio addTab, inserisco "nomcognom" che è di tipo String

    quindi ammesso che funzionasse quell'esperimento con JLabel, nn mi sarebbe utile nel mio caso, poichè ho String..correggimi se sbaglio.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da jin85
    il problema è questo...io carico quei nomi nelle tab tramite un ciclo, poichè li prendo da un file xml...al momento del caricamento quei nomi x me non sono delle JLabel, ma String.

    come vedi quando faccio addTab, inserisco "nomcognom" che è di tipo String

    quindi ammesso che funzionasse quell'esperimento con JLabel, nn mi sarebbe utile nel mio caso, poichè ho String..correggimi se sbaglio.
    Il primo parametro di addTab() è un String e su questo non ci piove. Non è qui che potresti agire.

    Io stavo parlando di usare setTabComponentAt(). Con questo (da Java 6) puoi impostare un componente da visualizzare sulla "linguetta" del tabbed pane. Il addTab() lo devi fare comunque .... il componente da visualizzare nell'area del tabbed pane lo devi aggiungere, no?
    Se usi setTabComponentAt() però il componente che passi va a "sovrascrivere" la stringa che passi ad addTab().

    E comunque ho fatto proprio adesso una prova con setTabComponentAt(). Puoi inserire un componente come JLabel ma non puoi allinearlo a sinistra nella linguetta. Il problema non è nella JLabel in sé .... ma nel come il tabbed pane dispone il contenuto delle linguette. Infatti il tabbed pane si basa solo sul "preferred" size del componente.

    Una possibilità ci sarebbe: impostare un preferred size abbastanza "largo" per la JLabel impostata con setTabComponentAt().

    Ecco un esempio:
    codice:
    import java.awt.*;
    import javax.swing.*;
    
    public class TabbedTabAlignTest {
        public static void main (String[] args) {
            SwingUtilities.invokeLater (new Runnable () {
                public void run () {
                    TabbedTabAlignTestFrame f = new TabbedTabAlignTestFrame ();
                    f.setVisible (true);
                }
            });
        }
    }
    
    class TabbedTabAlignTestFrame extends JFrame {
        private JTabbedPane tabbedPane;
    
        public TabbedTabAlignTestFrame () {
            super ("Tabbed Tab Align Test");
            setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            setSize (300, 300);
    
            tabbedPane = new JTabbedPane (JTabbedPane.LEFT);
    
            tabbedPane.addTab ("bla bla bla", new JLabel ("1"));
            tabbedPane.addTab ("hello", new JLabel ("2"));
            tabbedPane.addTab ("world", new JLabel ("3"));
    
            JLabel label1 = new JLabel ("ABC", SwingConstants.LEFT);
            label1.setPreferredSize (new Dimension (150, label1.getPreferredSize().height));
    
            tabbedPane.setTabComponentAt (1, label1);
    
            getContentPane ().add (tabbedPane);
        }
    }
    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
    Registrato dal
    Apr 2008
    Messaggi
    207
    si ma nel tuo caso ti sei creato una JLabel che sovrascrive il contenuto del secondo tab, ma nel mio caso invece ho questo:

    codice:
    for (int i=0; i<listamedici.size();i++){
    	                	 
    	                	 Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe);
    	         			 PannelloFrame.setSize(this.getSize());
    	                	 String nomcognom =listamedici.get(i).getNominativo();
    	                	 //tabbedPane.setAlignmentX(Component.LEFT_ALIGNMENT);
    	                	 tabbedPane.addTab(nomcognom,PannelloFrame);
    	                	 String PanneloFrame = PannelloFrame+"i";
    	                 }
    tramite questo ciclo, carico i nomi nelle varie tab, come puoi vedere ogni nome è rappresentato da "nomcognom" , e ogni "nomcognom" lo vado a prendere facendo listamedici.get(i).getNominativo();

    quindi quello che ti voglio dire è : come faccio nel mio caso ad associare una prefered size abbastanza grande a nomcognom che è di tipo String ?? nn so se sn stato chiaro..

    in poche parole, io nn mi posso creare della JLabel che vanno a sovrascrivere il contenuto iniziale, poichè ho già i nomi che mi servono in nomcognom.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da jin85
    quindi quello che ti voglio dire è : come faccio nel mio caso ad associare una prefered size abbastanza grande a nomcognom che è di tipo String ?? nn so se sn stato chiaro..

    in poche parole, io nn mi posso creare della JLabel che vanno a sovrascrivere il contenuto iniziale, poichè ho già i nomi che mi servono in nomcognom.
    Allora non mi sono spiegato io ..... facciamo l'ipotesi di usare setTabComponentAt() per impostare una JLabel (con un preferred size sufficiente).

    La prima stringa che passi ad addTab() la puoi anche passare vuota!! Poi a setTabComponentAt() passi un JLabel costruito con la tua stringa.

    codice:
    tabbedPane.addTab("",PannelloFrame);
    JLabel labTab = new JLabel (nomcognom, SwingConstants.LEFT);
    // imposta preferred size a labTab
    tabbedPane.setTabComponentAt (i, labTab);
    Più chiaro? L'unico problema sarebbe quello di stabilire o calcolare la larghezza "preferita".

    Ammetto che come soluzione non è il massimo .... lo so, non dirmelo.

    In alternativa ... proprio al limite, potresti non usare un JTabbedPane! Un'altra soluzione sarebbe quella di suddividere la finestra principale in 2 parti (con un apposito layout manager): a sinistra una JList che contiene i tuoi nomi e a destra un JPanel che ha un layout manager CardLayout che contiene i tuoi vari pannelli. CardLayout ti permette di mostrare 1 solo componente tra gli N aggiunti nel CardLayout. Concettualmente proprio come fa JTabbedPane. Solo che JTabbedPane ti mette pure le "linguette".

    Soluzioni di questo tipo cioè una lista a sinistra e a destra visualizzato 1 di N pannelli, sono usate in molti software. Ad esempio nella dialog "preferences" di Opera 7.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    ho fatto in questo modo :

    codice:
    for (int i=0; i<listamedici.size();i++){
    	                	 
    	                	 Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe);
    	         			 PannelloFrame.setSize(this.getSize());
    	                	 String nomcognom =listamedici.get(i).getNominativo();
    	                	 //tabbedPane.setAlignmentX(Component.LEFT_ALIGNMENT);
    	                	 tabbedPane.addTab(nomcognom,PannelloFrame);
    	                	 JLabel label = new JLabel (nomcognom, SwingConstants.LEFT);
    	                	 label.setPreferredSize (new Dimension (150, label.getPreferredSize().height));
    	                	 tabbedPane.setTabComponentAt (i, label);
    	                	 
    	                	 String PanneloFrame = PannelloFrame+"i";
    	                	 
    	                 }
    come faccio però a creare nel ciclo delle label progressive..in base alla i iniziale?xkè se lascio sempre label, mi sovrascrive tutto..e mi crea casini.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    207
    mi spiego meglio con delle immagini...inizialmente il mio codice era questo :

    codice:
    for (int i=0; i<listamedici.size();i++){
    	                	 
    	                	 Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe);
    	         			 PannelloFrame.setSize(this.getSize());
    	                	 String nomcognom =listamedici.get(i).getNominativo();
    	                	 tabbedPane.addTab(nomcognom,PannelloFrame);
    	                	 String PanneloFrame = PannelloFrame+"i";
    	                	 
    	                 }
    e le tab venivano in questo modo :



    scrivendo il codice per l'allineamento a sinistra abbiamo fatto così :

    codice:
    for (int i=0; i<listamedici.size();i++){
    	                	 
    	                	 Pannello_inserimento_modifica PannelloFrame =new Pannello_inserimento_modifica(this, tipoframe);
    	         			 PannelloFrame.setSize(this.getSize());
    	                	 String nomcognom =listamedici.get(i).getNominativo();
    	                	 
    	                	 tabbedPane.addTab("",PannelloFrame);
    	                	 JLabel labtab = new JLabel (nomcognom, SwingConstants.LEFT);
    	                	 labtab.setPreferredSize (new Dimension (150, labtab.getPreferredSize().height));
    	                	 tabbedPane.setTabComponentAt (i, labtab);
    	                	 String PanneloFrame = PannelloFrame+"i";
    	                	 
    	                 }
    e le tab mi vengono in questa maniera sballata :




    come mai questa cosa?cm posso ovviare?

    purtroppo nn posso usare l'altro metodo che hai detto tu..poichè il prof vuole il jtabbedpane.

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.